📄 psi.s
字号:
/* convert psi to si inplaceNote that `fp' below isn't a segment register.It's r6, the frame pointer. */#if __CODE__==32#define RET prts#else#define RET rts#endif#define EXTPSISI_SN(r_msw,r_lsw,sp) ; \ .global __extpsisi##r_msw ; \__extpsisi##r_msw: ; \ mov r_msw,r_lsw ; \ stc sp,r_msw ; \ RET EXTPSISI_SN(r2,r3,dp) EXTPSISI_SN(r4,r5,ep)#define ADDPSI_AR_RN(sr,an,r_msw,r_lsw) \ .global __addpsi##an##r_msw ; \__addpsi##an##r_msw: ; \ stc sr,@-sp ; \ add an,r_lsw ; \ addx @sp+,r_msw ; \ RET ADDPSI_AR_RN(dp,r2,r0,r1) ADDPSI_AR_RN(dp,r2,r3,r4) ADDPSI_AR_RN(ep,r4,r0,r1) ADDPSI_AR_RN(ep,r4,r1,r2) ADDPSI_AR_RN(ep,r4,r3,r4) ADDPSI_AR_RN(ep,r4,r5,fp) ADDPSI_AR_RN(tp,fp,r0,r1) #define ADDPSI_RN_AR(r_msw,r_lsw,sr,an,t_msw,t_lsw) \ .global __addpsi##r_msw##an ; \__addpsi##r_msw##an: ; \ mov.w t_msw,@-sp ; \ mov.w t_lsw,@-sp ; \ stc sr,t_msw ; \ mov an,t_lsw ; \ add r_lsw,t_lsw ; \ addx r_msw,t_msw ; \ ldc t_msw,sr ; \ mov.w t_lsw,an ; \ mov.w @sp+,t_lsw ; \ mov.w @sp+,t_msw ; \ RET ADDPSI_RN_AR(r0,r1,dp,r2,r4,r5) ADDPSI_RN_AR(r0,r1,ep,r4,r2,r3)#define EXTPSIHI_RN_RN(rm,r_msw,r_lsw) ; \ .global __extpsihi##rm##r_msw ; \__extpsihi##rm##r_msw: ; \ mov rm,r_lsw ; \ clr.w r_msw ; \ RET EXTPSIHI_RN_RN(r3,r0,r1) EXTPSIHI_RN_RN(r4,r0,r1) EXTPSIHI_RN_RN(r5,r0,r1) EXTPSIHI_RN_RN(r2,r0,r1)/* ifdefed out, because gcc doesn't like the # character in the above macro. The macro expands into an assembly languange comment anyways, so it serves no useful purpose. */#if 0#define EXTPSIHI_RN_SN(rm,r_msw,r_lsw) ; \ .global __extpsihi##rm##r_lsw ; \__extpsihi##rm##r_lsw: ; \ mov rm,r_lsw ; \ ldc \#0,r_msw ; \ RET EXTPSIHI_RN_SN(r0,dp,r2) EXTPSIHI_RN_SN(r0,ep,r4) EXTPSIHI_RN_SN(r1,dp,r2) EXTPSIHI_RN_SN(r1,ep,r4) EXTPSIHI_RN_SN(r3,dp,r2) EXTPSIHI_RN_SN(r3,ep,r4) EXTPSIHI_RN_SN(r5,dp,r2) EXTPSIHI_RN_SN(r5,ep,r4) EXTPSIHI_RN_SN(r2,ep,r4)#endif#define EXTPSISI_RN(r_msw,r_lsw) ; \ .global __extpsisi##r_msw ; \__extpsisi##r_msw: ; \ RET EXTPSISI_RN(r0,r1)#define ADDPSI_SA_SB(sa,ra,sb,rb) ; \ .global __addpsi##ra##rb ; \__addpsi##ra##rb: ; \ mov.w r0,@-sp ; \ mov.w r1,@-sp ; \ stc sa,r0 ; \ stc sb,r1 ; \ add.w ra,rb ; \ addx r0,r1 ; \ ldc r1,sb ; \ mov.w @sp+,r1 ; \ mov.w @sp+,r0 ; \ RET ADDPSI_SA_SB(dp,r2,ep,r4) ADDPSI_SA_SB(ep,r4,dp,r2) ADDPSI_SA_SB(tp,fp,dp,r2) ADDPSI_SA_SB(tp,fp,ep,r4) ADDPSI_SA_SB(dp,r2,dp,r2) .global __addpsir0r0__addpsir0r0: add.w r1,r1 addx r0,r0 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -