From 1e4e2a8ee4fa0a829d54a7953fca1c0d7d273569 Mon Sep 17 00:00:00 2001 From: Owen Rummage Date: Fri, 17 Jul 2026 13:59:33 -0500 Subject: [PATCH] fixes to make macos work correctly. v0.1a ready for release --- dist/fossmark-linux-arm64 | Bin 73872 -> 0 bytes src/fossmark.S | 73 ++++++++++++++++++++++++-------------- src/fossmark_x86_64.S | 20 ++++++++--- 3 files changed, 61 insertions(+), 32 deletions(-) delete mode 100755 dist/fossmark-linux-arm64 diff --git a/dist/fossmark-linux-arm64 b/dist/fossmark-linux-arm64 deleted file mode 100755 index 18e54ba294e6035f77314b27dad64d94d060f083..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 73872 zcmeHudwf*Yz3-Ztya*A4L=2Knc6exbg@k87Eqf+B0+PUipdMe7$;>1fnU^yY4KEon z_0iZPBdC;A2)+tbdZ>jKPi+m@>rs4EgHq~)4oDSEt1wu|RASEexA$6MXGpxg_n!Ot zoIm!Ko!?r&^?R-Fdav28owIPR(O_WWF|uDX%E`lIg{A&wY<=zp8JU%`OeQml<+C(M zrQj8EGEWIwY(ya*K{M1WGl7!cMqa+rC?iLCnFt%M{JlVhccQ7hOeHeUsdQhdniZ5O zwNd|4tVg=k@*`aqB_ZfZ9>+}-nDVF|iA{PZx!y^xCuocZCa9<%)s5Z&w;M3Z$WdM< z!bT~7FHn-DN9b+h_1IJ@D||sECC8YcLT~Y3!cI!(PEiGNr^re|&}URO6IAH^3-qXd z|Ll{^1($Gt{oz^2>n$jUNvU5BY!J-zDwna_E0?Xi%(DBhH&|T$?$ayHFYLQ>@~$T_W8UA z?qz+Htm}vG>xch*KYR*D!khfu0!Ckc-|B}yw;%rTe)!)5U&5RGoCc#Wzm@&)KkSF^ z?uY+)Km1kw@R#<(9}m8SH~D!LjK1Q3s2_f)AO8R9hrgg7{AxFJE$ZBgn4WW7#3I{zd9}9%* zgD$(%c8A}6A>#lm?1G5X-w;MP7+?+_j@J%36u5%06bQO~;acW(c|)!+5l3JJ8FqLP zlRxBcw1H>$xa)k(UgHmj84P)8WKN@$Lru+FINw@kn^ZJu1{2B2Q+kpm(}AE-`H$uR zN~PcxJR@cX;!$2rQK=E*-N4R)OY@I}_o3+H82%}2paB^?29iNq%ujoiauXZMc~2;L zBP-zY?{r&KJxqk!_2h_#pQ%Wwe_|TGwm*t~Koc9yKjIPnhWIo$U3k>~WCWjwq7-HD z{zQDLy?C-U{GO!=g}E9&RC*ps!&l}UDohLAE)9{4S#?}Ue@rn_>^n- z12yuCHT*0M|0WIp5)Hpv!ylyK*K7EfYWM*SU$i|HH){BUHS!S+e~5{_*d`^(_9nQVtOV(b)TPBC_B z@VE04*~e!^C1d{Ke982_c(V;`{a~Y<$Tl*iOv$GqKSGnwMBb{&4?@01lfMl4b(;K8 zyuSEWUCT~XmxF$aWd86Ti|ErK6p~;U$-m1wLAz!1(PeOj3CO-}Nr!@JQ$RE(; zzmNQJP2P&U(RjiCT;xY+@(Yl+YVwuH*J$!fkYA_fyI;BN-L6$kX_qrg4LkmRi*d*0 ztK|*n9Ht#Fr?JyJJgf@s_|93AVduG;anZ>v(vINTxgkgL!Hw zjYZcQFYk~{tm?g$q0WdAGJDvat>1Q69W!0AGiJ)!`BHcH6K&siPr=xKhw=rjY^sbQj7I_j=}(6Hg&s zz4Xa;V@7LxEc)}fAtTb>cJ1r&$WKqjSvpI^OexVdkcri@sbAkGC-&5`J&JC`6g3)K z+etnr7jmDNq9L;7VpGqol@pU)8aXMV$PJMo_lha%CVLJx_53P1@sdL$$JQ%yd7~ir zv?*#Mdo^ro>~1*`y9M#rT#!9>i=3dC4JnYl&lIINmO{SO&ZeFV$%(t|Y|pU654TVI z^-tOxu3OhmG5_nT-^CyQ$=j7kqBkSHD*`OB z!gnG*9Bn?d<6Qjm&G9(q@*FvJYr8!hZI86S9N$0Z*Kyf*G;X-=3^;_W|m@j!}1D? z7Bp6O#?a4(0q&Hr=_y!pV{KmmF&h7$QsL&;LCxP5(nY_Uf7V)rjNMkqdUj8s}XULw<%FXDN{-Ec@OoBX<;*l5KmU zyJ|b^Tm_t*z^NRz?gvJrfKefAJ_n4P!05OseWw9`wV3Gn%tSqBhZnVNr8n0`L zQrGG`3Q7x7SacSfefk*2z&6+?{4GPa#~J!fA$--s*E8T7Wz_%8x8hX(ApBDKRq#C< zaU7fRS$sSE*TVlO#Bz)ong_J8Xa@YJ!T$-wA~jkL7O<3NwmO5yfLMUHoWn|I8H^o< zZumdEwViwxT=#5T_$_$hy*T+3zV=@cyU3Rj_0{?kb1~8W{6?0KD7B*QHkP8)-SG9J z?S!xW>EFc##`|}E6xZTxkk9nOn(9fuwOAJbYx0?lb!_E`eX2hdYxea6?c_5ue_P!C z*018y%kRZ^!T%`K-vP{@`|5%Ah3Ll}5ByvE4>Py4?}$9o-ZuW*_;HM<{j)xdR{-}W z;4%_z@Z76Ei$9FM-tn7%kB@!!<+%IyUGd>5Y|+gjxy$g&PvaAKn>>Ry`i!w=2ij>a zUdCQ)Ux=~M{OnutogaM^pMUKe@z~&#@xP(HQqXoLwB7xdSp0jeZcARa&-^CF&l^?W z#CHz=Dn91Q&*KjUBJD-&lIB}HhFw->h`zm|^5ENRQd-{j5;e8Fy{7VDTi5JEZ1t-x z*q}Fyw{0+cqljfSlYBm_*+M$q!`GPqIlY0+1uRq1HFMpg(Cxlv^*^VNwh=KNB^|_R zYrNL0#zFB~4^b>^_3JI{{M~(mM(|yQ^ZDj|`X(XkKGC zsq^3Er`8bCpOMxdq|hYQBEG_Mzkxf z1wR_Xs(y`rAm+mx(avHnoQ`%BbKyC(k(l$kF&7!vuWyf;Qlke(m2HQQ#tYJjlgXz+hZHpb{*M0hB+PQoaQo&_gN|TUVBegMrHQ{ z-&Wd~p~H^3D^uP^AtJaO8B`PjK;eY*+k<}-J+#)<#?_*?Om{4?8~d{i&HEcicG_6^=>o*{FzU1sd&3ykC0dJd-a(orW--=b z|FXM^F}9mkPl&FB+&5*ZQ5oyh6G$uk$b@JZ>4YgOs^sOOXaISf^G@Lmv>WU3Zfo_# zXhCG6THZP_8bSF|>hk^+$eV)N1n#=F;m{oHl(j5--qNETMcYVs!2}Nq{)e+nX~wV+tFps3^@$wr zCll0Ql3#o~SiJow`#s0%SXbMCYO|DEZDtv6GsQ=^9IKPN+B&~A$sQW|vJ%rN%*zX>=#{AoXJ~QEUbog5HtlTx`qXXUMFY)f~?!F@CmlHTA?mh^6 z@-UD26lnGFX}nKNi+)6T@W0UVrRmYb$RD#|Jg|4$t8-6cEv(z3w)gbtA5cd9@qN%3 z`b`ea>(qZRS6`kdC$<{d>0L%v#nL0~XE3*Kyn(e;1J4k~*>3Vq9MzrAz2lDBm}r{ry&&wy?<4(TvpyvJax6?x%{<;sblX!DYs*rd&m!aAbOr^t!* zA|H?wKSDaOd^XM?b9Q__ZZ6Ir^Kkws$N2;O=8y7=U903BXO>!Urn2rh=P28OvsRSO zyR>&z_w11+RyO<%8|-|Baa`R6yn(}UoQsq(S3N$;s^!EZD5vudt#4nTO~kn;`OMRe zbI^hF-B&2{JnSeoB4ZRA_i!7fptOc`!Vax9XNh86`kE-#k2ol;W2Y#OHILT2zadR) zYzL@z?xnPCl2ZW*u!9%g3N!aB^P44*gRY?+o_{ zWFuL=fU!45oL_s$l67x$!FkJu{g6KnUF)fNi5f-M*rTh)`aAWkJdh>Mz<0H^Y(|8! z=|^!^p*E_vnr56CC?~pB9q75=p!y!~13QYpYn8^HvIfdK>=^$tn{~JvYd+axz>e%u z{KrujL-~X4#|+qqtTwdB=);F_9`0K8k`fo4-yi0@a zWRLjN&jnA|r}|NUqkA8U=M3Wc8nG$u5S9~|#}du(NtF6M**3^(eG^8Oa{}_8Kpt&! z%8L2HigOah7Ritk520Mtn{3C7Y!B6+?kfHco#cAc+K4$1dr9nraK}US&BJ_)-{6{G zMjdHASL>Lg)P-UZ^&wrluh8h-aw~t`0@q#S0(`sYO?+q+R)SYP8s^9k9tyCw) zM{PlN_oEFM##$T38pU*!*G}Ae} z7_r50pHyR%caW^zXzNtQ&bs_g(zzG?_5jNE^D)(iF_nY8!WrC0eGMDc_sgARrwDdv zowygV?X6+aHoSXL4{9SrinSAKKKcmj*oN{L>N$w~!bX-thxCjIn&)Xv=vwuv(oQqe z*}udb2IWj}^BFp;T)DI3AL#E4_cIga#EoaW_Yx0x$vMe!5=O1xbXQRfpYSA)@ z$*wkMW&6!v&Pw+VK|dC4NA#EpcV@8v0_=aew%m(09=j9!Fgh#5fGPG8w`2ct`_y_4eGXK)h+oiue~L|`ss?yfAE`aXbbGAtL{N8e>T>b+4^_dbFc=qjXoJ4GK3|Dj$K1) zW@XQ#?tkcvPj%}a4w)&aX|Y61IA8)G&cGJ)J=xmEKt#gt!Zoz-8)%u&MlyO3Y=?4 z;0|OR?lzvneT5PC5Og0x_Z)O@L3a|*Jl)dX^tT=HQI8&tKePQr{4XCr(f;iFzlo=^ zHoUPo*7ltR8L2JStkf1qc4|vgN@`0%xa^>HcFIA=>iq|s@}BzPnANYeELc6erGO1+ zw&Ffv9BcbvVRqXG-mJC{n%KaDO}L*ZV3!>HIg?+QnDO@J#aVA}{^Uo4TAEmPvvvG| z4F$Iz*zhXOY5UK2S4qrx5NkW$l!M9|ZpzRJj>!ekz@6K znpfs!IkWQ%@LKUY@Uoj~%>{U^cpZ4N+wA5Nyw<{i*-?0>c}ZcN`Alxm%nC#1Fw%d| z4Vw!J8_d?WYV%#P-TcadYO|xf&P;I?bm44QNV*Qlqd&0PEy=M_d`x*du`Qt|MOFyQ z;xxwjr#W5BDdXj*X60wF)AymD(z;LUAUnYpok0CvCs#eXm8Et(g>f<$_kL}R?P|hY z`wjZYR%Ys02fnR-RB02=qvyf93jJa(V>9Nauo?3(pM1VLy=9ic)KP=6x1heR^b5>K z9i{<0*Mdj7bL+>IE;pn%lkR7*LHolP{LY3h**^f81@+ESn}OYlUjsIipMO9m8G}f= z+CEZ>ylX_3W!I=2>#nQv%66^B{aF{@+dnfd`aF$g&oZ=KHx&6Rj}%m1gIC)4Ql(|% zZ!2p+O`uI#t(DKFZ1cUE^Hk+$DyfcCK53#0aV(evN?ETC*pt;(>c2ye;yT%v{(OHJf4hPnxtyXrrES*)I#hiBz zZ=*4%dDvw3?muATnrV-;fAi`uagX1IHx~ah<~}R>)ayq1#j$IK4_~k*d+E)7d= zr*Gc8b&*OBL;oDs)+3NRjCuYr=l~O!hkgv}q!H_61Z8yQqPddR+Y5Umb_Wc@ybE$yL+)xtu0S&Qtg_MPs5YVh{WsaH<~Ajh@8MK-=eB>K zFE{P3EI|LZHoZ{kz<8nd-m^^J^{d+~yEd97-(GWp@347<@0@w0Z_hFYzG2sle91Q> zf23~#ev4U-ez(?;(_uQ-UFD$hakjf^#&3R6DVeS^t9w-StU~jJn5RXX;Oh>%&nZow zG@)ii*d;A5K)V=~wo%V7+Hs*B5A!ow_O%VN_xl6nuCuWF`ll-o-HovjOT(Oxy+bzc zmj>g#3~wjOzrYwM8!UV046}G0rPb!9QoH%t(i(GJhQs_o-t7FJ=FQ3ftZ{Ij=Py`5OUhu(Z^{`A{# z&A+MU*8H=#8^L2;)Mx)}%;^}3`GR7k801vhYemdA+-CLOGz@n!##{4`rQMou9C&NK zoXSwfy2yvny$}1FccZ60Z zC#Zk#M=Ub#3AFQjfA<#j9gg;?^@l=UdvN(o311#b{#pqi5cz{Eq{7iF8zdS6p)r{x ze?e|^NOFfHpWipZ>B5IpUbhb)RJk2ep`+gASRQKdN~1lV2C3jWg{s<&iO;Eo?+Fv` zas_MrAs1&%s8D!cGdd1V=TkiAU?UVe0u-osG zt{xq_8bXWG~xgGAybwm71O4GE~IZLK@qOU90| zW=eQQdz@0C%kHR`&@5qUg?HVby#ER~0GYV)T?L zN(f8mSI%2FM0T;giRh=X6_Te+c1_up6QezIk7vnEPu9e4W z4`Z9f=%dN7%L{#1kUF~^)l$lryMjKKhq3v-u&d4$lq&3DWk#4bWkQWRELj#Vn~CZ> zo#UkjbkKSbr~9t)63YBa{VG5v!rNSo^DvG1#rVE5++zmyZNQhFGo@P9NUfq>8@dzU zNGi|bAU@udDjU2tt{?>+a=Y%ru&R~j1npse2r&CxAt~&aCRHf%6%K3@;BZc3*yVGg z+2&sWfb=WpEUJ_&OXpY2o+*_~Dpe|hfRwt8lWHkS#ZDQ=N#M5d=IPT>QG7Wn)w*Fg zI9{3}Rk*D*xC0F#R$--DGB(HO2(D0OJjDzvtGDCdq~h_?q+%)PZ}2(Mb4o~4Eni%} zBII_2*whm2Z2Zm@lG7bT(@voIx-MwH%N*cnXjVtPJ>-I|X(BRT zXrkRgJx~pkJ$Cr2lLLzefB*cB)9n>Ci)X#{COzU@%7s91r=UDik*v@{PK!A$n-NAx=;OVOMsV?d$#XBuAeP8 za(;x<*RE8HddDBOY|`rQzKiP@%G)`AAE&$f(2q0~Sz=oKwxwLZST+ndUGofMYzW?y zIEaSvqj=$8y1QROz8>@)(Cwg|phrNn5LnKq-Q5!CLeO&1deCanO`uJnyFoXBmVegW z{SoMcptN1w4w?g6c(S|uCeU(F59l7y=RscsZ38_5`X2G|BVZ2y7&;sN=`pNa!crQ| zhT&QHjCi?tohQ1xucbmux_K1Hc)aVuqcUchU>TJCq;ZSEdi3K#$Po_@=~m(04!L4t z;2|C@7QYwvkS2Sp@%|OOQc%U7^km8wlXZi!{OHGrxJ?>wgyVV0Wsn?yBv8VV0XxNy zWl(Qz6p`N;-Ym!{F(WPG{TgpJcPUADov(QrLte{YcD`&P(AAS00s9vN={yobS~ zy7&0rkhU?^`nc(_l(Hv`6@RoIejmQc2z*l!_e~td?jG294K@fHdZ>+F1MfZXJjAdJ zDtQAN{z{4;!-iHqnK1|W}sg%^e@7U9-{bds~3;_6oYpjeyIP! zPxX^oTLxMm%XmE9x*>DpfU+mjHl>#RIAycRxH$9Z$A9|Zk4N4=tki_QX}=Y30Q#HI zU$e-zWzc%Vlb3B7T(%*5sx7Bv}6!%ZLj$@0;M7I>U*f$Qrnh@rxgwrH+e%a4yzi|rnu^`tt26S#s8cv8b5 zKZ-xNQQX0c;th`G{po`bKT4ZV6;mpRiZ19CspWqYDQeDA@KPI6GtvJiMh^}7bS0(# z(Gk!Q&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP z&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP z&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP z&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP z&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP z&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP z&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP z&=JrP&=JrP&=JrP&=JrP&=JrP&=JrP_@9h`^GaC>Z#<_49_%?zMc%*@S)5-#Kvq(h z@OKXcKeC7+b9!Zsmfo*%2Q<}mB#Z&jA}lU z=g0H-2J(C^r0gocB}CjdA^hD=kRZCe{BUzVOZ&+C>71Fx%x;|-3fp~7d(g>x8F%~KVHj4-@w8%!r+dl5 zLfGw?5OjI`4mFr!DT$}pN#ZH?l6Z{ze>Q;*z~@;;87A9Hm^@4-4qMG>Uox9`+4J8a zBj%V!-uL>lBj%miV^yDh$+U4Fo-6y85q1Ra%Z?}$v@aPEYtwhcEMi^EW44S0Sauis zhppCS4>tr|HZ-xV#vKk3ta!z2flMEd2@(OLd{K!BdK>%Xn|kI~t&)kQup@oSr}oUh zz2(zbU-OoUr86<#^_I_IV&3e{AHc-?+MA!rL?7tQAIQW!)SHjhX`rlSDQOeCgo!rO z7Mj=~CfcAk|5BDaMb@&EvuY{CvCG+O ze7))|Ka`1etT+D(ww+nEEG2DXxvZ^EzF4(;tC*Nrt&{n~S+Sun`(ib}AW!`_g`Muc zz)@2)b{Na*nJZK-nve6te9Q{Ix(;Wv_mc2e`4{6)ksH_rzQhfw@)x(eh$qsI-;+sx zN5S5A)l1B8+$|f2gc0=>e6i0^{a)P9RsO~Ow)8vwW->AV2*1LPm~#Yw)_2;;Vi7)9 z3i-K6Q2c^l%nKHC{%$Ux%lS8R{%f4Sp7R}?Up-t_IO<=X4qJ?9_ce3{!8V6&CIDa3P7kt%DE{i4E`B;&^z!&l-IsasmoxgMbDbAOWr{^2I2FyR%eBKat zQh*=vbCdW3IA2QQ59R#AB)%GdHfx+Jle?a$0P^28PQ~6pD9|~A`cE>yi1SbNIX?_y zH;t8r358m?yf{~h!W+S-`o6>QK~{Ox_%B`;9E$wK{2y}r;`}D;t9CA4cOF;lT+A1^ zWhddL@-M_G?C*u0@4_=C$wE}2svV5S5xx0p`(wN(@q6S)^(`Mr;tTn})qTrHlK4XY zRAJxp8Do0$+xn@mYA2g*EbT4-I^+%5CnWP3p1yGVqauItx*r3dv5WU1XB7F1_X8@P z7w?M(V4k>)OeHwi4T2{O_@p^s4?I-VBURC&4T;%sHZYNvx2X5zm;u|ks zmp|;s{%67tpC1a9s2DrN`Jz8Nx&8CtQ@vhGnpXz_x4zm@>W4qEAO3vsv-`mR2Jj^w zo0ho1A8fpMehcN&16Tj-%jED&0Jp08y|80bN$%=6_;-vAuE!! zUeeRX`E3QVlHa8KW$cZ9?0gJ9^|$2yaJ(P+IPr}bFMR$N`bm z%f8%J>m!~IJQBuL#~uC}o68ptu3)&-u{rAPA(xU0`Ga945vX4gayvq5ad1T->{pY1 zZy@Ljsr-=J>r{n>pvUFY7P=bUVQt=K^SEmqggXGIUeQxHc?z@5ud1+JK(DHz zjIgV+*LYkAuqK37QS@vKpgNY@>RjP4x18}Mz5rV=yb5@Z|GGEfDm%^;&}XZJx(XhU;%%~-DrcD-Q%viP)7uaRz?VF zMUbiU`h7jMLRrXftH41 zv^nrMe8CEuw6@mM5USTY3#|w_{JvT(%VtAUiyldRK#ZSWJwQ0Q!{58tpwejFUTv-n z1y+l?`@+3Exf(B29L>avLMyysdkttfsM30oQm%^Yd<{i44Q`Kfg4@Z8V9gZ_up;7O z?y6@+&J{jbP-!@*mfYnEhTMK%uZ#_40MkwiJQeVS$)X#7!>&gBrIC&@ztTmET=jfx z*E^vra;!)R%VM2Bfo5DqUmfzQzDUE3-RpKB20tw0Pm$tIHI0G9iqN~gn2K2uzdu(D zgWpr*B6~O-bk{Us)?`JNB^BDdcBT5iOAm({{g#96mhuFQGN%e*qg2xK7t2zwrwBO% zUZF4USvPV9+1EZKt9_;+a~8k-2>sngSt;Jl8DgI({EGdpB7{FAO?PEN|A>(|4EMJR z!F{kwQ$fhL&=>oba`3Qq>CqRzua%Pm9`Spcnp16vG||O)>9;K5U)%$S(^RP`D#4jY zeT1B#w}DN+jfuRtFW%1e$v!<44#|l4iAN9J>yT}sFYc8)xqc%F;Sv6YzNr6Qyv(Xd zv7Y5KdE(y^+bz)7ej$NwnT7x;^N^u=8NHSt3zH;^3v z<|KV_-=51m&NIR>r^)`eC+UlO`8KY9ggUq85$z{fFCd{E|Kk3BQ>iK;2|-Si{kMTn zTXf+@-18slQWcW@iM*h1LhMqFzW6;L_D|{`fiCqu;a~i2aFXlCc>m$Uxu^e%b~pxI z5)u01_l4K^O}&IN?IYqA^ivdS^~LWHC%Jx`RvBrbC+Js6`r`MB?TS@~lUeUa=m{>} zGZIh4FV0hKTt6TLITiI5?0+CZ@fQmQr$V3RckM&6^ayG~qA&d~xx^SDsH*ko3HD`3 z@To?T5a-Zbqbf052y*@8{#S@{)IGVH>{bd4&nT`ZNRl}v9x-->4ABVJS2`#1X1rd! o0)NpiG`t1&NcKDtsu-TbNdYJO9}Jnk^l!LAl`KtCNXoMR0uyBuIRF3v diff --git a/src/fossmark.S b/src/fossmark.S index f7d01bf..1e6751f 100644 --- a/src/fossmark.S +++ b/src/fossmark.S @@ -19,21 +19,34 @@ # define SYM(name) name #endif +#define FN_BEGIN(name) FN_BEGIN_ASM SYM(name) +#define FN_END(name) FN_END_ASM SYM(name) + + .macro FN_BEGIN_ASM name + .p2align 4 + .globl \name #if defined(__ELF__) -# define FN_BEGIN(name) .p2align 4 ; .globl SYM(name) ; .type SYM(name), %function ; SYM(name): -# define FN_END(name) .size SYM(name), . - SYM(name) -#else -# define FN_BEGIN(name) .p2align 4 ; .globl SYM(name) ; SYM(name): -# define FN_END(name) + .type \name, %function #endif +\name: + .endm + + .macro FN_END_ASM name +#if defined(__ELF__) + .size \name, . - \name +#endif + .endm /* Materialise a 64-bit constant without a literal pool, so no relocations and * no .ltorg placement worries across object formats. */ -#define MOV64(reg, val) \ - movz reg, #((val) & 0xffff) ;\ - movk reg, #(((val) >> 16) & 0xffff), lsl #16 ;\ - movk reg, #(((val) >> 32) & 0xffff), lsl #32 ;\ - movk reg, #(((val) >> 48) & 0xffff), lsl #48 +#define MOV64(reg, val) MOV64_ASM reg, val + + .macro MOV64_ASM reg, val + movz \reg, #((\val) & 0xffff) + movk \reg, #(((\val) >> 16) & 0xffff), lsl #16 + movk \reg, #(((\val) >> 32) & 0xffff), lsl #32 + movk \reg, #(((\val) >> 48) & 0xffff), lsl #48 + .endm .text @@ -527,25 +540,31 @@ FN_END(fm_compress) * =================================================================== */ /* rotate each 32-bit lane left by n, via shl + shift-right-and-insert */ -#define VROTL(vd, vs, vt, n) \ - shl vt##.4s, vs##.4s, #(n) ;\ - sri vt##.4s, vs##.4s, #(32 - (n)) ;\ - mov vd##.16b, vt##.16b +#define VROTL(vd, vs, vt, n) VROTL_ASM vd, vs, vt, n + + .macro VROTL_ASM vd, vs, vt, n + shl \vt\().4s, \vs\().4s, #(\n) + sri \vt\().4s, \vs\().4s, #(32 - (\n)) + mov \vd\().16b, \vt\().16b + .endm /* one ChaCha quarter-round over rows a,b,c,d using v24 as scratch */ -#define QROUND(a, b, c, d) \ - add a##.4s, a##.4s, b##.4s ;\ - eor d##.16b, d##.16b, a##.16b ;\ - rev32 d##.8h, d##.8h ;\ - add c##.4s, c##.4s, d##.4s ;\ - eor b##.16b, b##.16b, c##.16b ;\ - VROTL(b, b, v24, 12) ;\ - add a##.4s, a##.4s, b##.4s ;\ - eor d##.16b, d##.16b, a##.16b ;\ - VROTL(d, d, v24, 8) ;\ - add c##.4s, c##.4s, d##.4s ;\ - eor b##.16b, b##.16b, c##.16b ;\ - VROTL(b, b, v24, 7) +#define QROUND(a, b, c, d) QROUND_ASM a, b, c, d + + .macro QROUND_ASM a, b, c, d + add \a\().4s, \a\().4s, \b\().4s + eor \d\().16b, \d\().16b, \a\().16b + rev32 \d\().8h, \d\().8h + add \c\().4s, \c\().4s, \d\().4s + eor \b\().16b, \b\().16b, \c\().16b + VROTL_ASM \b, \b, v24, 12 + add \a\().4s, \a\().4s, \b\().4s + eor \d\().16b, \d\().16b, \a\().16b + VROTL_ASM \d, \d, v24, 8 + add \c\().4s, \c\().4s, \d\().4s + eor \b\().16b, \b\().16b, \c\().16b + VROTL_ASM \b, \b, v24, 7 + .endm FN_BEGIN(fm_chacha20) and x1, x1, #~63 /* whole 64-byte blocks only */ diff --git a/src/fossmark_x86_64.S b/src/fossmark_x86_64.S index 4332ecf..ce48d7a 100644 --- a/src/fossmark_x86_64.S +++ b/src/fossmark_x86_64.S @@ -30,13 +30,23 @@ # define SYM(name) name #endif +#define FN_BEGIN(name) FN_BEGIN_ASM SYM(name) +#define FN_END(name) FN_END_ASM SYM(name) + + .macro FN_BEGIN_ASM name + .p2align 4 + .globl \name #if defined(__ELF__) -# define FN_BEGIN(name) .p2align 4 ; .globl SYM(name) ; .type SYM(name), @function ; SYM(name): -# define FN_END(name) .size SYM(name), . - SYM(name) -#else -# define FN_BEGIN(name) .p2align 4 ; .globl SYM(name) ; SYM(name): -# define FN_END(name) + .type \name, @function #endif +\name: + .endm + + .macro FN_END_ASM name +#if defined(__ELF__) + .size \name, . - \name +#endif + .endm .text