7 growable_byte_array code;
8 growable_byte_array relocation;
9 growable_array literals;
10 bool computing_offset_p;
15 explicit jit(code_block_type type, cell owner, factor_vm *parent);
16 void compute_position(cell offset);
18 void emit_relocation(cell code_template);
19 void emit(cell code_template);
21 void literal(cell literal) { literals.add(literal); }
22 void emit_with(cell code_template_, cell literal_);
24 void push(cell literal)
26 emit_with(parent->special_objects[JIT_PUSH_IMMEDIATE],literal);
29 void word_jump(cell word_)
31 gc_root<word> word(word_,parent);
32 literal(tag_fixnum(xt_tail_pic_offset));
33 literal(word.value());
34 emit(parent->special_objects[JIT_WORD_JUMP]);
37 void word_call(cell word)
39 emit_with(parent->special_objects[JIT_WORD_CALL],word);
42 void word_special(cell word)
44 emit_with(parent->special_objects[JIT_WORD_SPECIAL],word);
47 void emit_subprimitive(cell word_)
49 gc_root<word> word(word_,parent);
50 gc_root<array> code_pair(word->subprimitive,parent);
51 literals.append(untag<array>(array_nth(code_pair.untagged(),0)));
52 emit(array_nth(code_pair.untagged(),1));
55 void emit_class_lookup(fixnum index, cell type);
59 if(computing_offset_p)
61 /* If this is still on, emit() didn't clear it,
62 so the offset was out of bounds */
69 void set_position(fixnum position_)
71 if(computing_offset_p)
76 code_block *to_code_block();