6 void factor_vm::primitive_getenv()
8 fixnum e = untag_fixnum(dpeek());
12 void factor_vm::primitive_setenv()
14 fixnum e = untag_fixnum(dpop());
19 void factor_vm::primitive_exit()
21 exit(to_fixnum(dpop()));
24 void factor_vm::primitive_micros()
26 box_unsigned_8(current_micros());
29 void factor_vm::primitive_sleep()
31 sleep_micros(to_cell(dpop()));
34 void factor_vm::primitive_set_slot()
36 fixnum slot = untag_fixnum(dpop());
37 object *obj = untag<object>(dpop());
40 cell *slot_ptr = &obj->slots()[slot];
42 write_barrier(slot_ptr);
45 void factor_vm::primitive_load_locals()
47 fixnum count = untag_fixnum(dpop());
48 memcpy((cell *)(rs + sizeof(cell)),(cell *)(ds - sizeof(cell) * (count - 1)),sizeof(cell) * count);
49 ds -= sizeof(cell) * count;
50 rs += sizeof(cell) * count;
53 cell factor_vm::clone_object(cell obj_)
55 gc_root<object> obj(obj_,this);
57 if(immediate_p(obj.value()))
61 cell size = object_size(obj.value());
62 object *new_obj = allot_object(header(obj.type()),size);
63 memcpy(new_obj,obj.untagged(),size);
64 return tag_dynamic(new_obj);
68 void factor_vm::primitive_clone()
70 drepl(clone_object(dpeek()));