diff --git a/basis/compiler/constants/constants.factor b/basis/compiler/constants/constants.factor index b795862970..cc6003b89c 100644 --- a/basis/compiler/constants/constants.factor +++ b/basis/compiler/constants/constants.factor @@ -50,6 +50,7 @@ CONSTANT: rt-immediate 8 CONSTANT: rt-stack-chain 9 CONSTANT: rt-untagged 10 CONSTANT: rt-megamorphic-cache-hits 11 +CONSTANT: rt-vm 12 : rc-absolute? ( n -- ? ) ${ rc-absolute-ppc-2/2 rc-absolute-cell rc-absolute } member? ; diff --git a/vm/code_block.cpp b/vm/code_block.cpp index f19759fb0e..a64a8d2c2d 100755 --- a/vm/code_block.cpp +++ b/vm/code_block.cpp @@ -44,6 +44,7 @@ int factorvm::number_of_parameters(relocation_type type) case RT_THIS: case RT_STACK_CHAIN: case RT_MEGAMORPHIC_CACHE_HITS: + case RT_VM: return 0; default: critical_error("Bad rel type",type); @@ -186,6 +187,8 @@ cell factorvm::compute_relocation(relocation_entry rel, cell index, code_block * return untag_fixnum(ARG); case RT_MEGAMORPHIC_CACHE_HITS: return (cell)&megamorphic_cache_hits; + case RT_VM: + return (cell)this; default: critical_error("Bad rel type",rel); return 0; /* Can't happen */ diff --git a/vm/code_block.hpp b/vm/code_block.hpp index 60046ed380..50d937f4af 100644 --- a/vm/code_block.hpp +++ b/vm/code_block.hpp @@ -26,6 +26,8 @@ enum relocation_type { RT_UNTAGGED, /* address of megamorphic_cache_hits var */ RT_MEGAMORPHIC_CACHE_HITS, + /* address of vm object*/ + RT_VM, }; enum relocation_class { diff --git a/vm/master.hpp b/vm/master.hpp index bf60d1e4f6..c5c14e6999 100755 --- a/vm/master.hpp +++ b/vm/master.hpp @@ -35,8 +35,8 @@ /* Factor headers */ #include "layouts.hpp" -#include "platform.hpp" #include "primitives.hpp" +#include "platform.hpp" #include "stacks.hpp" #include "segments.hpp" #include "contexts.hpp"