+regblock_memtop = 0
+regblock_int_mask = 4
regblock_val = 8
+regblock_stack_guard = 44
+regblock_int_code = 48
address_mask = 0x3FFFFFF
.data
.globl c_save_stack
.globl _interface_initialize
_interface_initialize:
link a6,#0
- fmovel #0x7480,fpcr
+ fmovel #0x3480,fpcr
unlk a6
rts
.globl _C_to_interface
_asm_scheme_to_interface:
.globl scheme_to_interface
scheme_to_interface:
+ movl d6,a6@(regblock_val)
movl a5,_Free
movl sp,_Ext_Stack_Pointer
movl c_save_stack,sp
movl _Free,a5
lea _Registers,a6
movl #address_mask,d7
- movl a6@(regblock_val),d0
+ movl a6@(regblock_val),d6
+ movl d6,d0
movl d0,d1
andl d7,d1
movl d1,a4
_asm_safe_reference_trap:
moveq #0x20,d0
bra scheme_to_interface_jsr
- .globl _asm_generic_decrement
-_asm_generic_decrement:
- moveq #0x22,d0
- bra scheme_to_interface
- .globl _asm_generic_divide
-_asm_generic_divide:
- moveq #0x23,d0
- bra scheme_to_interface
- .globl _asm_generic_equal
-_asm_generic_equal:
- moveq #0x24,d0
- bra scheme_to_interface
- .globl _asm_generic_greater
-_asm_generic_greater:
- moveq #0x25,d0
- bra scheme_to_interface
- .globl _asm_generic_increment
-_asm_generic_increment:
- moveq #0x26,d0
- bra scheme_to_interface
- .globl _asm_generic_less
-_asm_generic_less:
- moveq #0x27,d0
- bra scheme_to_interface
- .globl _asm_generic_subtract
-_asm_generic_subtract:
- moveq #0x28,d0
- bra scheme_to_interface
- .globl _asm_generic_multiply
-_asm_generic_multiply:
- moveq #0x29,d0
- bra scheme_to_interface
- .globl _asm_generic_negative
-_asm_generic_negative:
- moveq #0x2a,d0
- bra scheme_to_interface
- .globl _asm_generic_add
-_asm_generic_add:
- moveq #0x2b,d0
- bra scheme_to_interface
- .globl _asm_generic_positive
-_asm_generic_positive:
- moveq #0x2c,d0
- bra scheme_to_interface
- .globl _asm_generic_zero
-_asm_generic_zero:
- moveq #0x2d,d0
- bra scheme_to_interface
.globl _asm_primitive_error
_asm_primitive_error:
moveq #0x36,d0
bra scheme_to_interface_jsr
+ .globl _asm_generic_quotient
+_asm_generic_quotient:
+ moveq #0x37,d0
+ bra scheme_to_interface
+ .globl _asm_generic_remainder
+_asm_generic_remainder:
+ moveq #0x38,d0
+ bra scheme_to_interface
+ .globl _asm_generic_modulo
+_asm_generic_modulo:
+ moveq #0x39,d0
+ bra scheme_to_interface
.globl _asm_interrupt_dlink
_asm_interrupt_dlink:
movl a4,d2
movl c_save_stack,sp
movl a7@,a6
movl d1,a7@-
- lea _utility_table,a0
- movl a0@(0x12*4),a0
+ movl _utility_table+0x12*4,a0
jsr a0@
lea a7@(4),sp
movl d0,a0
jmp a0@
tc_compiled_entry = 0x28
+tc_flonum = 0x06
+tc_fixnum = 0x1A
+tc_manifest_nmv = 0x27
+tc_false = 0x0
+tc_true = 0x8
offset_apply = 0x14
.globl _asm_shortcircuit_apply
_asm_shortcircuit_apply:
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_2
- andl d7,d1
- movl d1,a0
- movb a0@(-3),d1
- extw d1
- cmpw d1,d2
+ bnes shortcircuit_apply_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
+ movb a0@(-3),d3
+ extw d3
+ cmpw d3,d2
bnes shortcircuit_apply_1
jmp a0@
.globl shortcircuit_apply_1
shortcircuit_apply_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_2
-shortcircuit_apply_2:
moveq #offset_apply,d0
bra scheme_to_interface
.globl _asm_shortcircuit_apply_size_1
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_1_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_1_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #1,a0@(-3)
bnes shortcircuit_apply_size_1_1
jmp a0@
.globl shortcircuit_apply_size_1_1
shortcircuit_apply_size_1_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_1_2
-shortcircuit_apply_size_1_2:
moveq #1,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_2_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_2_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #2,a0@(-3)
bnes shortcircuit_apply_size_2_1
jmp a0@
.globl shortcircuit_apply_size_2_1
shortcircuit_apply_size_2_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_2_2
-shortcircuit_apply_size_2_2:
moveq #2,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_3_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_3_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #3,a0@(-3)
bnes shortcircuit_apply_size_3_1
jmp a0@
.globl shortcircuit_apply_size_3_1
shortcircuit_apply_size_3_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_3_2
-shortcircuit_apply_size_3_2:
moveq #3,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_4_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_4_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #4,a0@(-3)
bnes shortcircuit_apply_size_4_1
jmp a0@
.globl shortcircuit_apply_size_4_1
shortcircuit_apply_size_4_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_4_2
-shortcircuit_apply_size_4_2:
moveq #4,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_5_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_5_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #5,a0@(-3)
bnes shortcircuit_apply_size_5_1
jmp a0@
.globl shortcircuit_apply_size_5_1
shortcircuit_apply_size_5_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_5_2
-shortcircuit_apply_size_5_2:
moveq #5,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_6_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_6_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #6,a0@(-3)
bnes shortcircuit_apply_size_6_1
jmp a0@
.globl shortcircuit_apply_size_6_1
shortcircuit_apply_size_6_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_6_2
-shortcircuit_apply_size_6_2:
moveq #6,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_7_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_7_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #7,a0@(-3)
bnes shortcircuit_apply_size_7_1
jmp a0@
.globl shortcircuit_apply_size_7_1
shortcircuit_apply_size_7_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_7_2
-shortcircuit_apply_size_7_2:
moveq #7,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_8_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_8_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #8,a0@(-3)
bnes shortcircuit_apply_size_8_1
jmp a0@
.globl shortcircuit_apply_size_8_1
shortcircuit_apply_size_8_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_8_2
-shortcircuit_apply_size_8_2:
moveq #8,d2
moveq #offset_apply,d0
bra scheme_to_interface
+ .globl _asm_allocate_closure
+_asm_allocate_closure:
+ movl a5,_Free
+ movl sp,_Ext_Stack_Pointer
+ movl c_save_stack,sp
+ movl a7@,a6
+ movl a1,a7@-
+ movl d1,a7@-
+ movl d0,a7@-
+ jsr _allocate_closure
+ addql #4,sp
+ movl d0,a0
+ movl a7@+,d1
+ movl a7@+,a1
+ movl a6,a7@
+ movl sp,c_save_stack
+ movl _Ext_Stack_Pointer,sp
+ movl _Free,a5
+ lea _Registers,a6
+ movl #address_mask,d7
+ rts
+ .globl asm_generic_flonum_result
+asm_generic_flonum_result:
+ movl a5,d6
+ movl #tc_manifest_nmv*4*0x1000000+2,a5@+
+ fmoved fp0,a5@+
+ orl #tc_flonum*4*0x1000000,d6
+ andb #1*4-1,a7@
+ rts
+ .globl asm_true_result
+asm_true_result:
+ movl #tc_true*4*0x1000000,d6
+ andb #1*4-1,a7@
+ rts
+ .globl asm_false_result
+asm_false_result:
+ movl #tc_false*4*0x1000000,d6
+ andb #1*4-1,a7@
+ rts
+ .globl _asm_generic_decrement
+_asm_generic_decrement:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_decrement_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fsubb #1,fp0
+ bra asm_generic_flonum_result
+asm_generic_decrement_hook:
+ moveq #0x22,d0
+ bra scheme_to_interface
+ .globl _asm_generic_divide
+_asm_generic_divide:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_divide_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_divide_flo_fix
+ fmoved a0@(4),fp0
+ fdivd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_divide_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_divide_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_divide_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fdivd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_divide_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_divide_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fdivl d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_divide_hook:
+ moveq #0x23,d0
+ bra scheme_to_interface
+ .globl _asm_generic_equal
+_asm_generic_equal:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_equal_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_equal_flo_fix
+ addql #8,sp
+ fmoved a0@(4),fp0
+ fcmpd a1@(4),fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_equal_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_equal_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_equal_hook
+ addql #8,sp
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fcmpd a1@(4),fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_equal_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_equal_hook
+ addql #8,sp
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fcmpl d3,fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_equal_hook:
+ moveq #0x24,d0
+ bra scheme_to_interface
+ .globl _asm_generic_greater
+_asm_generic_greater:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_greater_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_greater_flo_fix
+ addql #8,sp
+ fmoved a0@(4),fp0
+ fcmpd a1@(4),fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_greater_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_greater_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_greater_hook
+ addql #8,sp
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fcmpd a1@(4),fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_greater_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_greater_hook
+ addql #8,sp
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fcmpl d3,fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_greater_hook:
+ moveq #0x25,d0
+ bra scheme_to_interface
+ .globl _asm_generic_increment
+_asm_generic_increment:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_increment_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ faddb #1,fp0
+ bra asm_generic_flonum_result
+asm_generic_increment_hook:
+ moveq #0x26,d0
+ bra scheme_to_interface
+ .globl _asm_generic_less
+_asm_generic_less:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_less_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_less_flo_fix
+ addql #8,sp
+ fmoved a0@(4),fp0
+ fcmpd a1@(4),fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_less_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_less_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_less_hook
+ addql #8,sp
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fcmpd a1@(4),fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_less_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_less_hook
+ addql #8,sp
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fcmpl d3,fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_less_hook:
+ moveq #0x27,d0
+ bra scheme_to_interface
+ .globl _asm_generic_subtract
+_asm_generic_subtract:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_subtract_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_subtract_flo_fix
+ fmoved a0@(4),fp0
+ fsubd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_subtract_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_subtract_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_subtract_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fsubd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_subtract_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_subtract_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fsubl d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_subtract_hook:
+ moveq #0x28,d0
+ bra scheme_to_interface
+ .globl _asm_generic_multiply
+_asm_generic_multiply:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_multiply_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_multiply_flo_fix
+ fmoved a0@(4),fp0
+ fmuld a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_multiply_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_multiply_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_multiply_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fmuld a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_multiply_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_multiply_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fmull d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_multiply_hook:
+ moveq #0x29,d0
+ bra scheme_to_interface
+ .globl _asm_generic_negative
+_asm_generic_negative:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_negative_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_negative_hook:
+ moveq #0x2a,d0
+ bra scheme_to_interface
+ .globl _asm_generic_add
+_asm_generic_add:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_add_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_add_flo_fix
+ fmoved a0@(4),fp0
+ faddd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_add_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_add_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_add_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ faddd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_add_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_add_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ faddl d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_add_hook:
+ moveq #0x2b,d0
+ bra scheme_to_interface
+ .globl _asm_generic_positive
+_asm_generic_positive:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_positive_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_positive_hook:
+ moveq #0x2c,d0
+ bra scheme_to_interface
+ .globl _asm_generic_zero
+_asm_generic_zero:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_zero_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_zero_hook:
+ moveq #0x2d,d0
+ bra scheme_to_interface
+ .globl _asm_stack_and_interrupt_check_12
+_asm_stack_and_interrupt_check_12:
+ movl #-12,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_14
+_asm_stack_and_interrupt_check_14:
+ movl #-14,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_18
+_asm_stack_and_interrupt_check_18:
+ movl #-18,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_22
+_asm_stack_and_interrupt_check_22:
+ movl #-22,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_24
+_asm_stack_and_interrupt_check_24:
+ movl #-24,a7@-
+ .globl stack_and_interrupt_check
+stack_and_interrupt_check:
+ cmpl a6@(regblock_stack_guard),sp
+ bgts stack_and_interrupt_check_1
+ bset #0,a6@(regblock_int_code+3)
+ btst #0,a6@(regblock_int_mask+3)
+ beqs stack_and_interrupt_check_1
+ movl #-1,a6@(regblock_memtop)
+ bras stack_and_interrupt_check_2
+stack_and_interrupt_check_1:
+ cmpl a6@(regblock_memtop),a5
+ bges stack_and_interrupt_check_2
+ addql #4,sp
+ rts
+stack_and_interrupt_check_2:
+ movl d0,a7@-
+ movl a7@(4),d0
+ addl d0,a7@(8)
+ movl a7@,d0
+ addql #8,sp
+ rts
+ .globl _asm_set_interrupt_enables
+_asm_set_interrupt_enables:
+ .globl set_interrupt_enables
+set_interrupt_enables:
+ movl a6@(regblock_int_mask),d6
+ orl #tc_fixnum*4*0x1000000,d6
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a6@(regblock_int_mask)
+ moveq #-1,d1
+ movl a6@(regblock_int_code),d2
+ andl d0,d2
+ bnes set_interrupt_enables_1
+ movl _MemTop,d1
+ btst #2,d0
+ bnes set_interrupt_enables_1
+ movl _Heap_Top,d1
+set_interrupt_enables_1:
+ movl d1,a6@(regblock_memtop)
+ movl _Stack_Guard,d1
+ btst #0,d0
+ bnes set_interrupt_enables_2
+ movl _Stack_Bottom,d1
+set_interrupt_enables_2:
+ movl d1,a6@(regblock_stack_guard)
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ jmp a0@
+regblock_memtop = 0
+regblock_int_mask = 4
regblock_val = 8
+regblock_stack_guard = 44
+regblock_int_code = 48
address_mask = 0x3FFFFFF
.data
.globl c_save_stack
_asm_scheme_to_interface:
.globl scheme_to_interface
scheme_to_interface:
+ movl d6,a6@(regblock_val)
movl a5,_Free
movl sp,_Ext_Stack_Pointer
movl c_save_stack,sp
movl _Free,a5
lea _Registers,a6
movl #address_mask,d7
- movl a6@(regblock_val),d0
+ movl a6@(regblock_val),d6
+ movl d6,d0
movl d0,d1
andl d7,d1
movl d1,a4
_asm_safe_reference_trap:
moveq #0x20,d0
bra scheme_to_interface_jsr
- .globl _asm_generic_decrement
-_asm_generic_decrement:
- moveq #0x22,d0
- bra scheme_to_interface
- .globl _asm_generic_divide
-_asm_generic_divide:
- moveq #0x23,d0
- bra scheme_to_interface
- .globl _asm_generic_equal
-_asm_generic_equal:
- moveq #0x24,d0
- bra scheme_to_interface
- .globl _asm_generic_greater
-_asm_generic_greater:
- moveq #0x25,d0
- bra scheme_to_interface
- .globl _asm_generic_increment
-_asm_generic_increment:
- moveq #0x26,d0
- bra scheme_to_interface
- .globl _asm_generic_less
-_asm_generic_less:
- moveq #0x27,d0
- bra scheme_to_interface
- .globl _asm_generic_subtract
-_asm_generic_subtract:
- moveq #0x28,d0
- bra scheme_to_interface
- .globl _asm_generic_multiply
-_asm_generic_multiply:
- moveq #0x29,d0
- bra scheme_to_interface
- .globl _asm_generic_negative
-_asm_generic_negative:
- moveq #0x2a,d0
- bra scheme_to_interface
- .globl _asm_generic_add
-_asm_generic_add:
- moveq #0x2b,d0
- bra scheme_to_interface
- .globl _asm_generic_positive
-_asm_generic_positive:
- moveq #0x2c,d0
- bra scheme_to_interface
- .globl _asm_generic_zero
-_asm_generic_zero:
- moveq #0x2d,d0
- bra scheme_to_interface
.globl _asm_primitive_error
_asm_primitive_error:
moveq #0x36,d0
bra scheme_to_interface_jsr
+ .globl _asm_generic_quotient
+_asm_generic_quotient:
+ moveq #0x37,d0
+ bra scheme_to_interface
+ .globl _asm_generic_remainder
+_asm_generic_remainder:
+ moveq #0x38,d0
+ bra scheme_to_interface
+ .globl _asm_generic_modulo
+_asm_generic_modulo:
+ moveq #0x39,d0
+ bra scheme_to_interface
.globl _asm_interrupt_dlink
_asm_interrupt_dlink:
movl a4,d2
movl c_save_stack,sp
movl a7@,a6
movl d1,a7@-
- lea _utility_table,a0
- movl a0@(0x12*4),a0
+ movl _utility_table+0x12*4,a0
jsr a0@
lea a7@(4),sp
movl d0,a0
movl a0@(0),a0
jmp a0@
tc_compiled_entry = 0x28
+tc_flonum = 0x06
+tc_fixnum = 0x1A
+tc_manifest_nmv = 0x27
+tc_false = 0x0
+tc_true = 0x8
offset_apply = 0x14
.globl _asm_shortcircuit_apply
_asm_shortcircuit_apply:
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_2
- andl d7,d1
- movl d1,a0
- movb a0@(-3),d1
- extw d1
- cmpw d1,d2
+ bnes shortcircuit_apply_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
+ movb a0@(-3),d3
+ extw d3
+ cmpw d3,d2
bnes shortcircuit_apply_1
jmp a0@
.globl shortcircuit_apply_1
shortcircuit_apply_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_2
-shortcircuit_apply_2:
moveq #offset_apply,d0
bra scheme_to_interface
.globl _asm_shortcircuit_apply_size_1
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_1_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_1_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #1,a0@(-3)
bnes shortcircuit_apply_size_1_1
jmp a0@
.globl shortcircuit_apply_size_1_1
shortcircuit_apply_size_1_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_1_2
-shortcircuit_apply_size_1_2:
moveq #1,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_2_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_2_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #2,a0@(-3)
bnes shortcircuit_apply_size_2_1
jmp a0@
.globl shortcircuit_apply_size_2_1
shortcircuit_apply_size_2_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_2_2
-shortcircuit_apply_size_2_2:
moveq #2,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_3_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_3_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #3,a0@(-3)
bnes shortcircuit_apply_size_3_1
jmp a0@
.globl shortcircuit_apply_size_3_1
shortcircuit_apply_size_3_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_3_2
-shortcircuit_apply_size_3_2:
moveq #3,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_4_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_4_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #4,a0@(-3)
bnes shortcircuit_apply_size_4_1
jmp a0@
.globl shortcircuit_apply_size_4_1
shortcircuit_apply_size_4_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_4_2
-shortcircuit_apply_size_4_2:
moveq #4,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_5_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_5_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #5,a0@(-3)
bnes shortcircuit_apply_size_5_1
jmp a0@
.globl shortcircuit_apply_size_5_1
shortcircuit_apply_size_5_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_5_2
-shortcircuit_apply_size_5_2:
moveq #5,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_6_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_6_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #6,a0@(-3)
bnes shortcircuit_apply_size_6_1
jmp a0@
.globl shortcircuit_apply_size_6_1
shortcircuit_apply_size_6_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_6_2
-shortcircuit_apply_size_6_2:
moveq #6,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_7_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_7_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #7,a0@(-3)
bnes shortcircuit_apply_size_7_1
jmp a0@
.globl shortcircuit_apply_size_7_1
shortcircuit_apply_size_7_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_7_2
-shortcircuit_apply_size_7_2:
moveq #7,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_8_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_8_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #8,a0@(-3)
bnes shortcircuit_apply_size_8_1
jmp a0@
.globl shortcircuit_apply_size_8_1
shortcircuit_apply_size_8_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_8_2
-shortcircuit_apply_size_8_2:
moveq #8,d2
moveq #offset_apply,d0
bra scheme_to_interface
+ .globl _asm_allocate_closure
+_asm_allocate_closure:
+ movl a5,_Free
+ movl sp,_Ext_Stack_Pointer
+ movl c_save_stack,sp
+ movl a7@,a6
+ movl a1,a7@-
+ movl d1,a7@-
+ movl d0,a7@-
+ jsr _allocate_closure
+ addql #4,sp
+ movl d0,a0
+ movl a7@+,d1
+ movl a7@+,a1
+ movl a6,a7@
+ movl sp,c_save_stack
+ movl _Ext_Stack_Pointer,sp
+ movl _Free,a5
+ lea _Registers,a6
+ movl #address_mask,d7
+ rts
+ .globl asm_generic_flonum_result
+asm_generic_flonum_result:
+ movl a5,d6
+ movl #tc_manifest_nmv*4*0x1000000+2,a5@+
+ fmoved fp0,a5@+
+ orl #tc_flonum*4*0x1000000,d6
+ andb #1*4-1,a7@
+ rts
+ .globl asm_true_result
+asm_true_result:
+ movl #tc_true*4*0x1000000,d6
+ andb #1*4-1,a7@
+ rts
+ .globl asm_false_result
+asm_false_result:
+ movl #tc_false*4*0x1000000,d6
+ andb #1*4-1,a7@
+ rts
+ .globl _asm_generic_decrement
+_asm_generic_decrement:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_decrement_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fsubb #1,fp0
+ bra asm_generic_flonum_result
+asm_generic_decrement_hook:
+ moveq #0x22,d0
+ bra scheme_to_interface
+ .globl _asm_generic_divide
+_asm_generic_divide:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_divide_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_divide_flo_fix
+ fmoved a0@(4),fp0
+ fdivd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_divide_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_divide_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_divide_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fdivd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_divide_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_divide_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fdivl d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_divide_hook:
+ moveq #0x23,d0
+ bra scheme_to_interface
+ .globl _asm_generic_equal
+_asm_generic_equal:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_equal_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_equal_flo_fix
+ addql #8,sp
+ fmoved a0@(4),fp0
+ fcmpd a1@(4),fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_equal_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_equal_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_equal_hook
+ addql #8,sp
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fcmpd a1@(4),fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_equal_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_equal_hook
+ addql #8,sp
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fcmpl d3,fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_equal_hook:
+ moveq #0x24,d0
+ bra scheme_to_interface
+ .globl _asm_generic_greater
+_asm_generic_greater:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_greater_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_greater_flo_fix
+ addql #8,sp
+ fmoved a0@(4),fp0
+ fcmpd a1@(4),fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_greater_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_greater_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_greater_hook
+ addql #8,sp
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fcmpd a1@(4),fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_greater_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_greater_hook
+ addql #8,sp
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fcmpl d3,fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_greater_hook:
+ moveq #0x25,d0
+ bra scheme_to_interface
+ .globl _asm_generic_increment
+_asm_generic_increment:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_increment_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ faddb #1,fp0
+ bra asm_generic_flonum_result
+asm_generic_increment_hook:
+ moveq #0x26,d0
+ bra scheme_to_interface
+ .globl _asm_generic_less
+_asm_generic_less:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_less_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_less_flo_fix
+ addql #8,sp
+ fmoved a0@(4),fp0
+ fcmpd a1@(4),fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_less_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_less_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_less_hook
+ addql #8,sp
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fcmpd a1@(4),fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_less_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_less_hook
+ addql #8,sp
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fcmpl d3,fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_less_hook:
+ moveq #0x27,d0
+ bra scheme_to_interface
+ .globl _asm_generic_subtract
+_asm_generic_subtract:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_subtract_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_subtract_flo_fix
+ fmoved a0@(4),fp0
+ fsubd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_subtract_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_subtract_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_subtract_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fsubd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_subtract_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_subtract_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fsubl d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_subtract_hook:
+ moveq #0x28,d0
+ bra scheme_to_interface
+ .globl _asm_generic_multiply
+_asm_generic_multiply:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_multiply_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_multiply_flo_fix
+ fmoved a0@(4),fp0
+ fmuld a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_multiply_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_multiply_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_multiply_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fmuld a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_multiply_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_multiply_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fmull d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_multiply_hook:
+ moveq #0x29,d0
+ bra scheme_to_interface
+ .globl _asm_generic_negative
+_asm_generic_negative:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_negative_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_negative_hook:
+ moveq #0x2a,d0
+ bra scheme_to_interface
+ .globl _asm_generic_add
+_asm_generic_add:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_add_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_add_flo_fix
+ fmoved a0@(4),fp0
+ faddd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_add_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_add_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_add_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ faddd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_add_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_add_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ faddl d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_add_hook:
+ moveq #0x2b,d0
+ bra scheme_to_interface
+ .globl _asm_generic_positive
+_asm_generic_positive:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_positive_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_positive_hook:
+ moveq #0x2c,d0
+ bra scheme_to_interface
+ .globl _asm_generic_zero
+_asm_generic_zero:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_zero_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_zero_hook:
+ moveq #0x2d,d0
+ bra scheme_to_interface
+ .globl _asm_stack_and_interrupt_check_12
+_asm_stack_and_interrupt_check_12:
+ movl #-12,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_14
+_asm_stack_and_interrupt_check_14:
+ movl #-14,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_18
+_asm_stack_and_interrupt_check_18:
+ movl #-18,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_22
+_asm_stack_and_interrupt_check_22:
+ movl #-22,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_24
+_asm_stack_and_interrupt_check_24:
+ movl #-24,a7@-
+ .globl stack_and_interrupt_check
+stack_and_interrupt_check:
+ cmpl a6@(regblock_stack_guard),sp
+ bgts stack_and_interrupt_check_1
+ bset #0,a6@(regblock_int_code+3)
+ btst #0,a6@(regblock_int_mask+3)
+ beqs stack_and_interrupt_check_1
+ movl #-1,a6@(regblock_memtop)
+ bras stack_and_interrupt_check_2
+stack_and_interrupt_check_1:
+ cmpl a6@(regblock_memtop),a5
+ bges stack_and_interrupt_check_2
+ addql #4,sp
+ rts
+stack_and_interrupt_check_2:
+ movl d0,a7@-
+ movl a7@(4),d0
+ addl d0,a7@(8)
+ movl a7@,d0
+ addql #8,sp
+ rts
+ .globl _asm_set_interrupt_enables
+_asm_set_interrupt_enables:
+ .globl set_interrupt_enables
+set_interrupt_enables:
+ movl a6@(regblock_int_mask),d6
+ orl #tc_fixnum*4*0x1000000,d6
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a6@(regblock_int_mask)
+ moveq #-1,d1
+ movl a6@(regblock_int_code),d2
+ andl d0,d2
+ bnes set_interrupt_enables_1
+ movl _MemTop,d1
+ btst #2,d0
+ bnes set_interrupt_enables_1
+ movl _Heap_Top,d1
+set_interrupt_enables_1:
+ movl d1,a6@(regblock_memtop)
+ movl _Stack_Guard,d1
+ btst #0,d0
+ bnes set_interrupt_enables_2
+ movl _Stack_Bottom,d1
+set_interrupt_enables_2:
+ movl d1,a6@(regblock_stack_guard)
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ jmp a0@
+regblock_memtop = 0
+regblock_int_mask = 4
regblock_val = 8
+regblock_stack_guard = 44
+regblock_int_code = 48
address_mask = 0x3FFFFFF
.data
.globl c_save_stack
.globl _interface_initialize
_interface_initialize:
link a6,#0
- fmovel #0x7480,fpcr
+ fmovel #0x3480,fpcr
unlk a6
rts
.globl _C_to_interface
_asm_scheme_to_interface:
.globl scheme_to_interface
scheme_to_interface:
+ movl d6,a6@(regblock_val)
movl a5,_Free
movl sp,_Ext_Stack_Pointer
movl c_save_stack,sp
movl _Free,a5
lea _Registers,a6
movl #address_mask,d7
- movl a6@(regblock_val),d0
+ movl a6@(regblock_val),d6
+ movl d6,d0
movl d0,d1
andl d7,d1
movl d1,a4
_asm_safe_reference_trap:
moveq #0x20,d0
bra scheme_to_interface_jsr
- .globl _asm_generic_decrement
-_asm_generic_decrement:
- moveq #0x22,d0
- bra scheme_to_interface
- .globl _asm_generic_divide
-_asm_generic_divide:
- moveq #0x23,d0
- bra scheme_to_interface
- .globl _asm_generic_equal
-_asm_generic_equal:
- moveq #0x24,d0
- bra scheme_to_interface
- .globl _asm_generic_greater
-_asm_generic_greater:
- moveq #0x25,d0
- bra scheme_to_interface
- .globl _asm_generic_increment
-_asm_generic_increment:
- moveq #0x26,d0
- bra scheme_to_interface
- .globl _asm_generic_less
-_asm_generic_less:
- moveq #0x27,d0
- bra scheme_to_interface
- .globl _asm_generic_subtract
-_asm_generic_subtract:
- moveq #0x28,d0
- bra scheme_to_interface
- .globl _asm_generic_multiply
-_asm_generic_multiply:
- moveq #0x29,d0
- bra scheme_to_interface
- .globl _asm_generic_negative
-_asm_generic_negative:
- moveq #0x2a,d0
- bra scheme_to_interface
- .globl _asm_generic_add
-_asm_generic_add:
- moveq #0x2b,d0
- bra scheme_to_interface
- .globl _asm_generic_positive
-_asm_generic_positive:
- moveq #0x2c,d0
- bra scheme_to_interface
- .globl _asm_generic_zero
-_asm_generic_zero:
- moveq #0x2d,d0
- bra scheme_to_interface
.globl _asm_primitive_error
_asm_primitive_error:
moveq #0x36,d0
bra scheme_to_interface_jsr
+ .globl _asm_generic_quotient
+_asm_generic_quotient:
+ moveq #0x37,d0
+ bra scheme_to_interface
+ .globl _asm_generic_remainder
+_asm_generic_remainder:
+ moveq #0x38,d0
+ bra scheme_to_interface
+ .globl _asm_generic_modulo
+_asm_generic_modulo:
+ moveq #0x39,d0
+ bra scheme_to_interface
.globl _asm_interrupt_dlink
_asm_interrupt_dlink:
movl a4,d2
movl c_save_stack,sp
movl a7@,a6
movl d1,a7@-
- lea _utility_table,a0
- movl a0@(0x12*4),a0
+ movl _utility_table+0x12*4,a0
jsr a0@
lea a7@(4),sp
movl d0,a0
movl a0@(0),a0
jmp a0@
tc_compiled_entry = 0x28
+tc_flonum = 0x06
+tc_fixnum = 0x1A
+tc_manifest_nmv = 0x27
+tc_false = 0x0
+tc_true = 0x8
offset_apply = 0x14
.globl _asm_shortcircuit_apply
_asm_shortcircuit_apply:
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_2
- andl d7,d1
- movl d1,a0
- movb a0@(-3),d1
- extw d1
- cmpw d1,d2
+ bnes shortcircuit_apply_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
+ movb a0@(-3),d3
+ extw d3
+ cmpw d3,d2
bnes shortcircuit_apply_1
jmp a0@
.globl shortcircuit_apply_1
shortcircuit_apply_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_2
-shortcircuit_apply_2:
moveq #offset_apply,d0
bra scheme_to_interface
.globl _asm_shortcircuit_apply_size_1
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_1_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_1_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #1,a0@(-3)
bnes shortcircuit_apply_size_1_1
jmp a0@
.globl shortcircuit_apply_size_1_1
shortcircuit_apply_size_1_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_1_2
-shortcircuit_apply_size_1_2:
moveq #1,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_2_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_2_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #2,a0@(-3)
bnes shortcircuit_apply_size_2_1
jmp a0@
.globl shortcircuit_apply_size_2_1
shortcircuit_apply_size_2_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_2_2
-shortcircuit_apply_size_2_2:
moveq #2,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_3_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_3_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #3,a0@(-3)
bnes shortcircuit_apply_size_3_1
jmp a0@
.globl shortcircuit_apply_size_3_1
shortcircuit_apply_size_3_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_3_2
-shortcircuit_apply_size_3_2:
moveq #3,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_4_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_4_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #4,a0@(-3)
bnes shortcircuit_apply_size_4_1
jmp a0@
.globl shortcircuit_apply_size_4_1
shortcircuit_apply_size_4_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_4_2
-shortcircuit_apply_size_4_2:
moveq #4,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_5_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_5_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #5,a0@(-3)
bnes shortcircuit_apply_size_5_1
jmp a0@
.globl shortcircuit_apply_size_5_1
shortcircuit_apply_size_5_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_5_2
-shortcircuit_apply_size_5_2:
moveq #5,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_6_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_6_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #6,a0@(-3)
bnes shortcircuit_apply_size_6_1
jmp a0@
.globl shortcircuit_apply_size_6_1
shortcircuit_apply_size_6_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_6_2
-shortcircuit_apply_size_6_2:
moveq #6,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_7_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_7_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #7,a0@(-3)
bnes shortcircuit_apply_size_7_1
jmp a0@
.globl shortcircuit_apply_size_7_1
shortcircuit_apply_size_7_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_7_2
-shortcircuit_apply_size_7_2:
moveq #7,d2
moveq #offset_apply,d0
bra scheme_to_interface
andb #0xFC,d0
movl a7@+,d1
cmpb #tc_compiled_entry*4,d0
- bnes shortcircuit_apply_size_8_2
- andl d7,d1
- movl d1,a0
+ bnes shortcircuit_apply_size_8_1
+ movl d1,d3
+ andl d7,d3
+ movl d3,a0
cmpb #8,a0@(-3)
bnes shortcircuit_apply_size_8_1
jmp a0@
.globl shortcircuit_apply_size_8_1
shortcircuit_apply_size_8_1:
- movl a7@(-4),d1
- .globl shortcircuit_apply_size_8_2
-shortcircuit_apply_size_8_2:
moveq #8,d2
moveq #offset_apply,d0
bra scheme_to_interface
+ .globl _asm_allocate_closure
+_asm_allocate_closure:
+ movl a5,_Free
+ movl sp,_Ext_Stack_Pointer
+ movl c_save_stack,sp
+ movl a7@,a6
+ movl a1,a7@-
+ movl d1,a7@-
+ movl d0,a7@-
+ jsr _allocate_closure
+ addql #4,sp
+ movl d0,a0
+ movl a7@+,d1
+ movl a7@+,a1
+ movl a6,a7@
+ movl sp,c_save_stack
+ movl _Ext_Stack_Pointer,sp
+ movl _Free,a5
+ lea _Registers,a6
+ movl #address_mask,d7
+ rts
+ .globl asm_generic_flonum_result
+asm_generic_flonum_result:
+ movl a5,d6
+ movl #tc_manifest_nmv*4*0x1000000+2,a5@+
+ fmoved fp0,a5@+
+ orl #tc_flonum*4*0x1000000,d6
+ andb #1*4-1,a7@
+ rts
+ .globl asm_true_result
+asm_true_result:
+ movl #tc_true*4*0x1000000,d6
+ andb #1*4-1,a7@
+ rts
+ .globl asm_false_result
+asm_false_result:
+ movl #tc_false*4*0x1000000,d6
+ andb #1*4-1,a7@
+ rts
+ .globl _asm_generic_decrement
+_asm_generic_decrement:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_decrement_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fsubb #1,fp0
+ bra asm_generic_flonum_result
+asm_generic_decrement_hook:
+ moveq #0x22,d0
+ bra scheme_to_interface
+ .globl _asm_generic_divide
+_asm_generic_divide:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_divide_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_divide_flo_fix
+ fmoved a0@(4),fp0
+ fdivd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_divide_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_divide_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_divide_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fdivd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_divide_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_divide_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fdivl d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_divide_hook:
+ moveq #0x23,d0
+ bra scheme_to_interface
+ .globl _asm_generic_equal
+_asm_generic_equal:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_equal_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_equal_flo_fix
+ addql #8,sp
+ fmoved a0@(4),fp0
+ fcmpd a1@(4),fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_equal_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_equal_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_equal_hook
+ addql #8,sp
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fcmpd a1@(4),fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_equal_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_equal_hook
+ addql #8,sp
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fcmpl d3,fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_equal_hook:
+ moveq #0x24,d0
+ bra scheme_to_interface
+ .globl _asm_generic_greater
+_asm_generic_greater:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_greater_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_greater_flo_fix
+ addql #8,sp
+ fmoved a0@(4),fp0
+ fcmpd a1@(4),fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_greater_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_greater_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_greater_hook
+ addql #8,sp
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fcmpd a1@(4),fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_greater_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_greater_hook
+ addql #8,sp
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fcmpl d3,fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_greater_hook:
+ moveq #0x25,d0
+ bra scheme_to_interface
+ .globl _asm_generic_increment
+_asm_generic_increment:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_increment_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ faddb #1,fp0
+ bra asm_generic_flonum_result
+asm_generic_increment_hook:
+ moveq #0x26,d0
+ bra scheme_to_interface
+ .globl _asm_generic_less
+_asm_generic_less:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_less_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_less_flo_fix
+ addql #8,sp
+ fmoved a0@(4),fp0
+ fcmpd a1@(4),fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_less_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_less_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_less_hook
+ addql #8,sp
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fcmpd a1@(4),fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_less_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_less_hook
+ addql #8,sp
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fcmpl d3,fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_less_hook:
+ moveq #0x27,d0
+ bra scheme_to_interface
+ .globl _asm_generic_subtract
+_asm_generic_subtract:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_subtract_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_subtract_flo_fix
+ fmoved a0@(4),fp0
+ fsubd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_subtract_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_subtract_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_subtract_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fsubd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_subtract_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_subtract_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fsubl d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_subtract_hook:
+ moveq #0x28,d0
+ bra scheme_to_interface
+ .globl _asm_generic_multiply
+_asm_generic_multiply:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_multiply_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_multiply_flo_fix
+ fmoved a0@(4),fp0
+ fmuld a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_multiply_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_multiply_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_multiply_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ fmuld a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_multiply_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_multiply_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ fmull d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_multiply_hook:
+ moveq #0x29,d0
+ bra scheme_to_interface
+ .globl _asm_generic_negative
+_asm_generic_negative:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_negative_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fblt asm_true_result
+ bra asm_false_result
+asm_generic_negative_hook:
+ moveq #0x2a,d0
+ bra scheme_to_interface
+ .globl _asm_generic_add
+_asm_generic_add:
+ movb a7@,d0
+ andb #0xFC,d0
+ movb a7@(4),d1
+ andb #0xFC,d1
+ movl a7@,d2
+ movl a7@(4),d3
+ andl d7,d2
+ andl d7,d3
+ movl d2,a0
+ movl d3,a1
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_add_fix_flo
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_add_flo_fix
+ fmoved a0@(4),fp0
+ faddd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_add_fix_flo:
+ cmpb #tc_fixnum*4,d0
+ bnes asm_generic_add_hook
+ cmpb #tc_flonum*4,d1
+ bnes asm_generic_add_hook
+ lsll #6,d2
+ asrl #6,d2
+ fmovel d2,fp0
+ faddd a1@(4),fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_add_flo_fix:
+ cmpb #tc_fixnum*4,d1
+ bnes asm_generic_add_hook
+ lsll #6,d3
+ asrl #6,d3
+ fmoved a0@(4),fp0
+ faddl d3,fp0
+ addql #8,sp
+ bra asm_generic_flonum_result
+asm_generic_add_hook:
+ moveq #0x2b,d0
+ bra scheme_to_interface
+ .globl _asm_generic_positive
+_asm_generic_positive:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_positive_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fbgt asm_true_result
+ bra asm_false_result
+asm_generic_positive_hook:
+ moveq #0x2c,d0
+ bra scheme_to_interface
+ .globl _asm_generic_zero
+_asm_generic_zero:
+ movb a7@,d0
+ andb #0xFC,d0
+ cmpb #tc_flonum*4,d0
+ bnes asm_generic_zero_hook
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ fmoved a0@(4),fp0
+ fbeq asm_true_result
+ bra asm_false_result
+asm_generic_zero_hook:
+ moveq #0x2d,d0
+ bra scheme_to_interface
+ .globl _asm_stack_and_interrupt_check_12
+_asm_stack_and_interrupt_check_12:
+ movl #-12,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_14
+_asm_stack_and_interrupt_check_14:
+ movl #-14,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_18
+_asm_stack_and_interrupt_check_18:
+ movl #-18,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_22
+_asm_stack_and_interrupt_check_22:
+ movl #-22,a7@-
+ bras stack_and_interrupt_check
+ .globl _asm_stack_and_interrupt_check_24
+_asm_stack_and_interrupt_check_24:
+ movl #-24,a7@-
+ .globl stack_and_interrupt_check
+stack_and_interrupt_check:
+ cmpl a6@(regblock_stack_guard),sp
+ bgts stack_and_interrupt_check_1
+ bset #0,a6@(regblock_int_code+3)
+ btst #0,a6@(regblock_int_mask+3)
+ beqs stack_and_interrupt_check_1
+ movl #-1,a6@(regblock_memtop)
+ bras stack_and_interrupt_check_2
+stack_and_interrupt_check_1:
+ cmpl a6@(regblock_memtop),a5
+ bges stack_and_interrupt_check_2
+ addql #4,sp
+ rts
+stack_and_interrupt_check_2:
+ movl d0,a7@-
+ movl a7@(4),d0
+ addl d0,a7@(8)
+ movl a7@,d0
+ addql #8,sp
+ rts
+ .globl _asm_set_interrupt_enables
+_asm_set_interrupt_enables:
+ .globl set_interrupt_enables
+set_interrupt_enables:
+ movl a6@(regblock_int_mask),d6
+ orl #tc_fixnum*4*0x1000000,d6
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a6@(regblock_int_mask)
+ moveq #-1,d1
+ movl a6@(regblock_int_code),d2
+ andl d0,d2
+ bnes set_interrupt_enables_1
+ movl _MemTop,d1
+ btst #2,d0
+ bnes set_interrupt_enables_1
+ movl _Heap_Top,d1
+set_interrupt_enables_1:
+ movl d1,a6@(regblock_memtop)
+ movl _Stack_Guard,d1
+ btst #0,d0
+ bnes set_interrupt_enables_2
+ movl _Stack_Bottom,d1
+set_interrupt_enables_2:
+ movl d1,a6@(regblock_stack_guard)
+ movl a7@+,d0
+ andl d7,d0
+ movl d0,a0
+ jmp a0@