📄 libgcc.s
字号:
inc rems1: sb MULH, 1 ret not ress not rest not resu not resv not resw not resx not resy not resz incsnz resz incsz resy ret incsnz resx incsz resw ret incsnz resv incsz resu ret incsnz rest inc ress ret .endfunc#undef arg1s#undef arg1t#undef arg1u#undef arg1v#undef arg1w#undef arg1x#undef arg1y#undef arg1z#undef arg2s#undef arg2t#undef arg2u#undef arg2v#undef arg2w#undef arg2x#undef arg2y#undef arg2z #undef ress#undef rest#undef resu#undef resv#undef resw#undef resx#undef resy#undef resz#undef rems#undef remt#undef remu#undef remv#undef remw#undef remx#undef remy#undef remz#undef tmp_var#undef tmp_var1#undef tmp_var2#undef tmp_var3#undef tmp_var4#undef tmp_var5#undef tmp_var6#undef cnt#endif /* defined (L_divmoddi4) */#if defined (L_udivmoddi4) #define arg1s 1(SP)#define arg1t 2(SP)#define arg1u 3(SP)#define arg1v 4(SP)#define arg1w 5(SP)#define arg1x 6(SP)#define arg1y 7(SP)#define arg1z 8(SP)#define arg2s 9(SP)#define arg2t 10(SP)#define arg2u 11(SP)#define arg2v 12(SP)#define arg2w 13(SP)#define arg2x 14(SP)#define arg2y 15(SP)#define arg2z 16(SP) #define ress $80#define rest $81#define resu $82#define resv $83#define resw $84#define resx $85#define resy $86#define resz $87#define rems $88#define remt $89#define remu $8a#define remv $8b#define remw $8c#define remx $8d#define remy $8e#define remz $8f#define tmp_var $90#define tmp_var1 $91#define tmp_var2 $92#define tmp_var3 $93#define tmp_var4 $94#define tmp_var5 $95#define tmp_var6 $96#define cnt $97 .sect .text.libgcc,"ax" .global __udivmoddi4 .func _udivmoddi4, __udivmoddi4__udivmoddi4: clr rems clr remt clr remu clr remv clr remw clr remx clr remy clr remz mov w, #65 mov cnt, w clrb status, 0 page 1f jmp 1f2: rl remz rl remy rl remx rl remw rl remv rl remu rl remt rl rems mov w, arg2z sub w, remz mov tmp_var, w mov w, arg2y subc w, remy mov tmp_var1, w mov w, arg2x subc w, remx mov tmp_var2, w mov w, arg2w subc w, remw mov tmp_var3, w mov w, arg2v subc w, remv mov tmp_var4, w mov w, arg2u subc w, remu mov tmp_var5, w mov w, arg2t subc w, remt mov tmp_var6, w mov w, arg2s subc w, rems sc page 1f jmp 1f mov rems, w mov w, tmp_var6 mov remt, w mov w, tmp_var5 mov remu, w mov w, tmp_var4 mov remv, w mov w, tmp_var3 mov remw, w mov w, tmp_var2 mov remx, w mov w, tmp_var1 mov remy, w mov w, tmp_var mov remz, w1: rl arg1z rl arg1y rl arg1x rl arg1w rl arg1v rl arg1u rl arg1t rl arg1s decsz cnt page 2b jmp 2b pop ress pop rest pop resu pop resv pop resw pop resx pop resy pop resz mov w, #8 add spl, w ret .endfunc#undef arg1s#undef arg1t#undef arg1u#undef arg1v#undef arg1w#undef arg1x#undef arg1y#undef arg1z#undef arg2s#undef arg2t#undef arg2u#undef arg2v#undef arg2w#undef arg2x#undef arg2y#undef arg2z #undef ress#undef rest#undef resu#undef resv#undef resw#undef resx#undef resy#undef resz#undef rems#undef remt#undef remu#undef remv#undef remw#undef remx#undef remy#undef remz#undef tmp_var#undef tmp_var1#undef tmp_var2#undef tmp_var3#undef tmp_var4#undef tmp_var5#undef tmp_var6#undef cnt#endif /* defined (L_udivmoddi4) */#define LT #0#define EQ #1#define GT #2#if defined(L_cmphi2)#define arg1l 2(sp)#define arg1h 1(sp)#define arg2l 4(sp)#define arg2h 3(sp) .sect .text.libgcc,"ax" .global __cmphi2 .global __cmp_ret .global __cmpqi_ret .func _cmphi2, __cmphi2__cmphi2: mov w,arg1l sub w,arg2l snz page 2f jmp 2f mov w,arg1h1: subc w,arg2h clr arg2l rl arg2l snb arg1h,7 setb arg2l,2 snb arg2h,7 setb arg2l,1 mov w,#3__cmp_ret: add spl,w ; sign1 pop wreg ; sign2__cmpqi_ret: add pcl,w ; carry of arg1 - arg2 retw GT ; [000] arg1 > arg2 retw LT ; [001] arg1 < arg2 retw GT ; [010] arg1 > arg2 retw GT ; [011] arg1 > arg2 retw LT ; [100] arg1 < arg2 retw LT ; [101] arg1 < arg2 retw GT ; [110] arg1 > arg2 retw LT ; [111] arg1 < arg22: mov w,arg1h cse w,arg2h page 1b jmp 1b mov w,#4 add spl,w retw EQ .endfunc#undef arg1l#undef arg1h#undef arg2l#undef arg2h#endif /* L_cmphi2 */#if defined(L_cmpqi2)#define arg1 1(sp)#define arg2 2(sp) .sect .text.libgcc,"ax" .global __cmpqi2 .func _cmpqi2, __cmpqi2__cmpqi2: mov w, arg1 sub w, arg2 snz page 2f jmp 2f clr wreg rl wreg snb arg1, 7 setb wreg, 2 snb arg2, 7 setb wreg, 1 inc spl inc spl page __cmpqi_ret jmp __cmpqi_ret2: mov w, #2 add spl, w retw EQ .endfunc#undef arg1l#undef arg2l#endif /* L_cmpqi2 */#if defined(L_cmpsi2)#define arg1d 4(sp)#define arg1c 3(sp)#define arg1b 2(sp)#define arg1a 1(sp)#define arg2d 8(sp)#define arg2c 7(sp)#define arg2b 6(sp)#define arg2a 5(sp) .sect .text.libgcc,"ax" .global __cmpsi2 .func _cmpsi2, __cmpsi2__cmpsi2: mov w, arg1d sub w, arg2d snz page 2f jmp 2f1: mov w, arg1c subc w, arg2c mov w, arg1b subc w, arg2b mov w, arg1a subc w, arg2a clr arg2d rl arg2d snb arg1a, 7 setb arg2d, 2 snb arg2a, 7 setb arg2d, 1 mov w, #7 page __cmp_ret jmp __cmp_ret2: mov w, arg1c cse w, arg2c page 1b jmp 1b mov w, arg1b cse w, arg2b page 1b jmp 1b mov w, arg1a cse w, arg2a page 1b jmp 1b mov w, #8 add spl, w retw EQ .endfunc#undef arg1d#undef arg1c#undef arg1b#undef arg1a#undef arg2d#undef arg2c#undef arg2b#undef arg2a#endif /* L_cmpsi2 */#if defined(L_cmpdi2)#define arg1z 8(sp)#define arg1y 7(sp)#define arg1x 6(sp)#define arg1w 5(sp)#define arg1v 4(sp)#define arg1u 3(sp)#define arg1t 2(sp)#define arg1s 1(sp)#define arg2z 16(sp)#define arg2y 15(sp)#define arg2x 14(sp)#define arg2w 13(sp)#define arg2v 12(sp)#define arg2u 11(sp)#define arg2t 10(sp)#define arg2s 9(sp) .sect .text.libgcc,"ax" .global __cmpdi2 .func _cmpdi2, __cmpdi2__cmpdi2: mov w, arg1z sub w, arg2z snz page 2f jmp 2f1: mov w, arg1y subc w, arg2y mov w, arg1x subc w, arg2x mov w, arg1w subc w, arg2w mov w, arg1v subc w, arg2v mov w, arg1u subc w, arg2u mov w, arg1t subc w, arg2t mov w, arg1s subc w, arg2s clr arg2z rl arg2z snb arg1s, 7 setb arg2z, 2 snb arg2s, 7 setb arg2z, 1 mov w, #15 page __cmp_ret jmp __cmp_ret2: mov w, arg1y cse w, arg2y page 1b jmp 1b mov w, arg1x cse w, arg2x page 1b jmp 1b mov w, arg1w cse w, arg2w page 1b jmp 1b mov w, arg1v cse w, arg2v page 1b jmp 1b mov w, arg1u cse w, arg2u page 1b jmp 1b mov w, arg1t cse w, arg2t page 1b jmp 1b mov w, arg1s cse w, arg2s page 1b jmp 1b mov w, #16 add spl, w retw EQ .endfunc #undef arg1z#undef arg1y#undef arg1x#undef arg1w#undef arg1v#undef arg1u#undef arg1t#undef arg1s#undef arg2z#undef arg2y#undef arg2x#undef arg2w#undef arg2v#undef arg2u#undef arg2t#undef arg2s#endif /* L_cmpdi2 */ #if defined(L_cmpdi2_dp) .sect .text.libgcc,"ax" .global __cmpdi2_dp .func _cmpdi2_dp, __cmpdi2_dp__cmpdi2_dp: push 7(dp) push 6(dp) push 5(dp) push 4(dp) push 3(dp) push 2(dp) push 1(dp) push (dp) page __cmpdi2 jmp __cmpdi2 .endfunc#endif /* L_cmpdi2_dp */#if defined(L_fp_pop_args_ret) .sect .pram.libgcc,"ax" .global __fp_pop_args_ret .global __pop_args_ret .global __pop2_args_ret .func __fp_pop2_args_ret, __fp_pop2_args_ret__fp_pop2_args_ret: mov w, #2__fp_pop_args_ret: pop 0xfd pop 0xfe__pop_args_ret: pop callh pop calll add spl, w ret .endfunc#endif /* L_fp_pop_args_ret */#if defined(L__pop2_args_ret) .sect .pram.libgcc,"ax" .global __pop2_args_ret .func __pop2_args_ret, __pop2_args_ret__pop2_args_ret: mov w, #2 pop callh pop calll add spl, w ret .endfunc#endif /* L__pop2_args_ret */#if defined(L_leaf_fp_pop_args_ret) .sect .pram.libgcc,"ax" .global __leaf_fp_pop_args_ret, __leaf_fp_pop2_args_ret .func __leaf_fp2_pop_args_ret, __leaf_fp_pop2_args_ret__leaf_fp_pop2_args_ret: mov w, #2__leaf_fp_pop_args_ret: pop 0xfd pop 0xfe add spl, w ret .endfunc#endif /* L_leaf_fp_pop_args_ret */#if defined(L_movstrhi_countqi) .sect .pram.libgcc,"ax" .global __movstrhi_countqi .func _movstrhi_countqi, __movstrhi_countqi__movstrhi_countqi: push dph ; Save our pointer regs push dpl push iph push ipl mov w, 5(SP) ; Get our dest pointer mov dph, w mov w, 6(SP) mov dpl, w mov w, 7(SP) ; And our source pointer mov iph, w mov w, 8(SP) mov ipl, w1: push (IP) ; *dest++ = *src++ pop 0(DP) inc ipl inc dpl decsz 9(SP) ; Loop until completed page 1b jmp 1b pop ipl ; Restore our pointer regs pop iph pop dpl pop dph mov w, #5 ; Tidy up our stack args add spl, w ret .endfunc#endif#if defined(L_movstrhi_counthi) .sect .text.libgcc,"ax" .global __movstrhi_counthi .func _movstrhi_counthi, __movstrhi_counthi__movstrhi_counthi: push dph ; Save our pointer regs push dpl push iph push ipl mov w, 5(SP) ; Get our dest pointer mov dph, w mov w, 6(SP) mov dpl, w mov w, 7(SP) ; And our source pointer mov iph, w mov w, 8(SP) mov ipl, w test 10(SP) ; If we have a nonzero LSB then adjust the sz ; MSB of the loop count to allow us to use inc 9(SP) ; skip tricks!1: push (IP) ; *dest++ = *src++ pop 0(DP) inc ipl inc dpl decsnz 10(SP) ; Loop until completed - note the skip trick decsz 9(SP) ; on the MSB! page 1b jmp 1b pop ipl ; Restore our pointer regs pop iph pop dpl pop dph mov w, #6 ; Tidy up our stacked args. add spl, w ret .endfunc#endif#if defined(L_exit) .sect .text.libgcc,"ax" .global __exit .global _exit .func _exit, __exit .weak __exit .weak _exit_exit: __exit: pop $88 pop wreg or w, $88 push wreg push #0 push #1 system ; Exit wreg page __exit ; Never return jmp __exit .endfunc#endif#if defined(Labort) .sect .text.libgcc,"ax" .global _abort .func abort, _abort_abort: push #1 push #0 push #1 system ; Exit 1 ret .endfunc#endif#if defined(Lwrite) /* Dummy entrypoint to suppress problems with glue code. */ .sect .text.libgcc,"ax" .global _write .func write, _write;;;; write (fil,buf,len) - say that write succeeds....;; _write: movb $80, 5(SP) movb $81, 6(SP) ; Return length written mov w, #6 add spl, w ret .endfunc#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -