Virtual machine layout and interface definition


Document formatted by vherva at Fri Apr 24 11:23:56 1998 on the host schemestation. This document is produced by the SchemeStation project during the Tik-76.115 course.

  1. Introduction
  2. The functions of module VM external interface
    1. File 1.ssscm
    2. File vm.h
      1. Status make_instruction (INOUT unsigned char *buf, INOUT int *instruction_size, IN Vm_instruction instruction, IN uint64 *args)
      2. Status reverse_map_instruction (IN int instr_num, OUT const char **nameptr, OUT const char **argsptr)
      3. Status vm_execute (IN Heap heap, IN Registerset *registers, IN Bytecode *byte_code, INOUT uint64 *instr_count, OUT Vm_status *status)
      4. Status vm_message (IN Heap heap, IN Registerset *registers, IN LinearizedHeap message, OUT Vm_status *status)
      5. Status vm_send_message_out (uchar *address, LinearizedHeap heap, uint64 data_length)
    3. File vm_data.h
    4. File vm_debug.h
      1. Status vm_debug_print_ops (IN Vm_decoded_instr *decoded)
    5. File vm_encode.h
      1. Vm_status vm_encoder_const (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
      2. Vm_status vm_encoder_nop (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
      3. Vm_status vm_encoder_reg1 (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
      4. Vm_status vm_encoder_reg12 (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
      5. Vm_status vm_encoder_reg123 (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
      6. Vm_status vm_encoder_reg1234 (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
      7. Vm_status vm_encoder_reg12const (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
      8. Vm_status vm_encoder_reg12tag (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
      9. Vm_status vm_encoder_reg1const (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
      10. Vm_status vm_encoder_reg1tag (IN Vm_instruction instr, OUT unsigned char *buf, OUT int *instr_size, IN uint64 *args)
    6. File vm_instr.h
      1. _PLACE_INSTR (x)
      2. Vm_status vm_decoder_const (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      3. Vm_status vm_decoder_extend (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      4. Vm_status vm_decoder_nop (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      5. Vm_status vm_decoder_reg1 (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      6. Vm_status vm_decoder_reg12 (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      7. Vm_status vm_decoder_reg123 (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      8. Vm_status vm_decoder_reg1234 (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      9. Vm_status vm_decoder_reg12const (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      10. Vm_status vm_decoder_reg12tag (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      11. Vm_status vm_decoder_reg1const (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      12. Vm_status vm_decoder_reg1tag (IN uint32 instr, IN Heap heap, IN uint64 *imm_offset, OUT Vm_decoded_instr *decoded)
      13. Vm_status vm_operator_alloc_boolean (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      14. Vm_status vm_operator_alloc_float (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      15. Vm_status vm_operator_alloc_integer (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      16. Vm_status vm_operator_alloc_pair (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      17. Vm_status vm_operator_alloc_pair_tagged (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      18. Vm_status vm_operator_alloc_private_bit_string (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      19. Vm_status vm_operator_alloc_private_bit_string_tagged (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      20. Vm_status vm_operator_alloc_shared_bit_string (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      21. Vm_status vm_operator_alloc_shared_bit_string_tagged (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      22. Vm_status vm_operator_alloc_vector (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      23. Vm_status vm_operator_alloc_vector_immediate (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      24. Vm_status vm_operator_alloc_vector_tagged (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      25. Vm_status vm_operator_and (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      26. Vm_status vm_operator_bit_string_cmp (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      27. Vm_status vm_operator_bit_string_debug_dump (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      28. Vm_status vm_operator_bit_string_ge (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      29. Vm_status vm_operator_bit_string_len (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      30. Vm_status vm_operator_bit_string_to_int (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      31. Vm_status vm_operator_boolean_get (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      32. Vm_status vm_operator_boolean_not (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      33. Vm_status vm_operator_boolean_set (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      34. Vm_status vm_operator_branch (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      35. Vm_status vm_operator_branch_immediate (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      36. Vm_status vm_operator_cons (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      37. Vm_status vm_operator_copy_bit_string (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      38. Vm_status vm_operator_copy_pair (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      39. Vm_status vm_operator_copy_vector (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      40. Vm_status vm_operator_create_procedure (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      41. Vm_status vm_operator_create_procedure_immediate (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      42. Vm_status vm_operator_disable_exceptions (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      43. Vm_status vm_operator_enable_exceptions (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      44. Vm_status vm_operator_eq (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      45. Vm_status vm_operator_float_add (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      46. Vm_status vm_operator_float_cmp (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      47. Vm_status vm_operator_float_div (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      48. Vm_status vm_operator_float_exp (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      49. Vm_status vm_operator_float_ge (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      50. Vm_status vm_operator_float_get (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      51. Vm_status vm_operator_float_log (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      52. Vm_status vm_operator_float_log10 (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      53. Vm_status vm_operator_float_mod (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      54. Vm_status vm_operator_float_mul (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      55. Vm_status vm_operator_float_rem (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      56. Vm_status vm_operator_float_set (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      57. Vm_status vm_operator_float_sqrt (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      58. Vm_status vm_operator_float_sub (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      59. Vm_status vm_operator_float_to_int (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      60. Vm_status vm_operator_get_message (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      61. Vm_status vm_operator_get_procedure_address (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      62. Vm_status vm_operator_get_procedure_env (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      63. Vm_status vm_operator_get_substring (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      64. Vm_status vm_operator_halt (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      65. Vm_status vm_operator_int_add (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      66. Vm_status vm_operator_int_cmp (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      67. Vm_status vm_operator_int_div (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      68. Vm_status vm_operator_int_ge (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      69. Vm_status vm_operator_int_mod (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      70. Vm_status vm_operator_int_mul (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      71. Vm_status vm_operator_int_rem (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      72. Vm_status vm_operator_int_sub (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      73. Vm_status vm_operator_int_to_bit_string (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      74. Vm_status vm_operator_int_to_float (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      75. Vm_status vm_operator_integer_get (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      76. Vm_status vm_operator_integer_set (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      77. Vm_status vm_operator_is_of_actor_address (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      78. Vm_status vm_operator_is_of_boolean (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      79. Vm_status vm_operator_is_of_byte_code (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      80. Vm_status vm_operator_is_of_float (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      81. Vm_status vm_operator_is_of_integer (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      82. Vm_status vm_operator_is_of_pair (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      83. Vm_status vm_operator_is_of_pair_tagged (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      84. Vm_status vm_operator_is_of_private_bit_string (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      85. Vm_status vm_operator_is_of_private_bit_string_tagged (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      86. Vm_status vm_operator_is_of_procedure (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      87. Vm_status vm_operator_is_of_shared_bit_string (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      88. Vm_status vm_operator_is_of_shared_bit_string_tagged (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      89. Vm_status vm_operator_is_of_vector (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      90. Vm_status vm_operator_is_of_vector_tagged (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      91. Vm_status vm_operator_jump (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      92. Vm_status vm_operator_jump_immediate (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      93. Vm_status vm_operator_land (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      94. Vm_status vm_operator_load (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      95. Vm_status vm_operator_load_null (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      96. Vm_status vm_operator_lor (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      97. Vm_status vm_operator_move (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      98. Vm_status vm_operator_neg (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      99. Vm_status vm_operator_nop (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      100. Vm_status vm_operator_not (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      101. Vm_status vm_operator_or (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      102. Vm_status vm_operator_pair_get_car (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      103. Vm_status vm_operator_pair_get_car_or_block (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      104. Vm_status vm_operator_pair_get_cdr (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      105. Vm_status vm_operator_pair_set_car (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      106. Vm_status vm_operator_pair_set_cdr (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      107. Vm_status vm_operator_pop (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      108. Vm_status vm_operator_push (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      109. Vm_status vm_operator_put_message (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      110. Vm_status vm_operator_restore (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      111. Vm_status vm_operator_restore_immediate (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      112. Vm_status vm_operator_rol (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      113. Vm_status vm_operator_ror (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      114. Vm_status vm_operator_save (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      115. Vm_status vm_operator_save_immediate (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      116. Vm_status vm_operator_send_message (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      117. Vm_status vm_operator_set_exception_handler (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      118. Vm_status vm_operator_set_substring (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      119. Vm_status vm_operator_shl (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      120. Vm_status vm_operator_shr (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      121. Vm_status vm_operator_tag_cmp (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      122. Vm_status vm_operator_vector_get (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      123. Vm_status vm_operator_vector_get_index (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      124. Vm_status vm_operator_vector_len (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      125. Vm_status vm_operator_vector_set (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      126. Vm_status vm_operator_vector_set_index (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
      127. Vm_status vm_operator_xor (IN Heap heap, IN Registerset *registers, IN Vm_decoded_instr *instr)
    7. File vm_instr_info.h
    8. File vm_instr_reverse.h
    9. File vm_instructions.h
    10. File vmtests.scm
  3. Internal interfaces
    1. Instruction encoding & decoding
    2. Instruction selection and individual instructions
    3. Exceptions
    4. VM and asynchronous messages

© SchemeStation project 1997-1998 [Back to the document index]