From f89ed6c4cd5c194e706dacf161282ebe2c2924c0 Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Wed, 3 Nov 1993 23:05:42 +0000 Subject: [PATCH] Update to match current "mc68k.m4". --- v7/src/microcode/cmpauxmd/sun3-gcc.s | 667 ++++++++++++++++++++++----- v7/src/microcode/cmpauxmd/sun3-nfp.s | 665 +++++++++++++++++++++----- v7/src/microcode/cmpauxmd/sun3.s | 667 ++++++++++++++++++++++----- 3 files changed, 1673 insertions(+), 326 deletions(-) diff --git a/v7/src/microcode/cmpauxmd/sun3-gcc.s b/v7/src/microcode/cmpauxmd/sun3-gcc.s index c529f3ce9..b160acdc1 100644 --- a/v7/src/microcode/cmpauxmd/sun3-gcc.s +++ b/v7/src/microcode/cmpauxmd/sun3-gcc.s @@ -1,4 +1,8 @@ +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 @@ -8,7 +12,7 @@ c_save_stack: .globl _interface_initialize _interface_initialize: link a6,#0 - fmovel #0x7480,fpcr + fmovel #0x3480,fpcr unlk a6 rts .globl _C_to_interface @@ -21,6 +25,7 @@ _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 @@ -46,7 +51,8 @@ interface_to_scheme_internal: 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 @@ -106,58 +112,22 @@ _asm_reference_trap: _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 @@ -170,13 +140,17 @@ _asm_primitive_apply: 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: @@ -186,19 +160,17 @@ 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 @@ -209,17 +181,15 @@ 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 @@ -231,17 +201,15 @@ shortcircuit_apply_size_2: 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 @@ -253,17 +221,15 @@ shortcircuit_apply_size_3: 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 @@ -275,17 +241,15 @@ shortcircuit_apply_size_4: 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 @@ -297,17 +261,15 @@ shortcircuit_apply_size_5: 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 @@ -319,17 +281,15 @@ shortcircuit_apply_size_6: 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 @@ -341,17 +301,15 @@ shortcircuit_apply_size_7: 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 @@ -363,17 +321,508 @@ shortcircuit_apply_size_8: 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@ diff --git a/v7/src/microcode/cmpauxmd/sun3-nfp.s b/v7/src/microcode/cmpauxmd/sun3-nfp.s index edb175cfe..9629bddac 100644 --- a/v7/src/microcode/cmpauxmd/sun3-nfp.s +++ b/v7/src/microcode/cmpauxmd/sun3-nfp.s @@ -1,4 +1,8 @@ +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 @@ -20,6 +24,7 @@ _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 @@ -47,7 +52,8 @@ interface_to_scheme_internal: 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 @@ -107,58 +113,22 @@ _asm_reference_trap: _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 @@ -171,8 +141,7 @@ _asm_primitive_apply: 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 @@ -180,6 +149,11 @@ _asm_primitive_apply: 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: @@ -189,19 +163,17 @@ 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 @@ -212,17 +184,15 @@ 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 @@ -234,17 +204,15 @@ shortcircuit_apply_size_2: 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 @@ -256,17 +224,15 @@ shortcircuit_apply_size_3: 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 @@ -278,17 +244,15 @@ shortcircuit_apply_size_4: 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 @@ -300,17 +264,15 @@ shortcircuit_apply_size_5: 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 @@ -322,17 +284,15 @@ shortcircuit_apply_size_6: 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 @@ -344,17 +304,15 @@ shortcircuit_apply_size_7: 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 @@ -366,17 +324,508 @@ shortcircuit_apply_size_8: 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@ diff --git a/v7/src/microcode/cmpauxmd/sun3.s b/v7/src/microcode/cmpauxmd/sun3.s index 7db5e254c..5119f05fd 100644 --- a/v7/src/microcode/cmpauxmd/sun3.s +++ b/v7/src/microcode/cmpauxmd/sun3.s @@ -1,4 +1,8 @@ +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 @@ -8,7 +12,7 @@ c_save_stack: .globl _interface_initialize _interface_initialize: link a6,#0 - fmovel #0x7480,fpcr + fmovel #0x3480,fpcr unlk a6 rts .globl _C_to_interface @@ -21,6 +25,7 @@ _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 @@ -48,7 +53,8 @@ interface_to_scheme_internal: 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 @@ -108,58 +114,22 @@ _asm_reference_trap: _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 @@ -172,8 +142,7 @@ _asm_primitive_apply: 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 @@ -181,6 +150,11 @@ _asm_primitive_apply: 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: @@ -190,19 +164,17 @@ 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 @@ -213,17 +185,15 @@ 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 @@ -235,17 +205,15 @@ shortcircuit_apply_size_2: 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 @@ -257,17 +225,15 @@ shortcircuit_apply_size_3: 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 @@ -279,17 +245,15 @@ shortcircuit_apply_size_4: 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 @@ -301,17 +265,15 @@ shortcircuit_apply_size_5: 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 @@ -323,17 +285,15 @@ shortcircuit_apply_size_6: 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 @@ -345,17 +305,15 @@ shortcircuit_apply_size_7: 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 @@ -367,17 +325,508 @@ shortcircuit_apply_size_8: 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@ -- 2.25.1