From f684e56a7035703b499759ec4e74b787d44a1122 Mon Sep 17 00:00:00 2001 From: IgorCielniak Date: Thu, 18 Dec 2025 12:03:49 +0100 Subject: [PATCH] removed useless strlen from stdlib.sl --- a.out | Bin 11184 -> 11432 bytes build/a.asm | 72 +++++++++++++++++++++++++------------- build/a.o | Bin 4240 -> 4368 bytes build/hello.asm | 65 ++++++++++++++++++++++++++-------- build/hello.o | Bin 4096 -> 4384 bytes build/main.asm | 65 ++++++++++++++++++++++++++-------- build/main.o | Bin 4160 -> 4416 bytes build/str.asm | 64 ++++++++++++++++++++++++++++++++- build/str.o | Bin 4816 -> 5248 bytes build/test_write_file.asm | 23 ++++++------ build/test_write_file.o | Bin 5632 -> 5616 bytes stdlib/stdlib.sl | 10 ------ test_write_file.sl | 5 ++- write | Bin 11648 -> 11648 bytes 14 files changed, 226 insertions(+), 78 deletions(-) diff --git a/a.out b/a.out index 9c30d5e02e35843ea55b84d3b9115de109492304..b6e3423fb9143f7d6e8ff84ac6b3cd1ca7670fec 100755 GIT binary patch delta 818 zcmdlGz9Mph2Ga|ziCTGF;cN_G5Y9Gnksc%e#*2>pOmb|KMFh$i8#i|g{A8)`Hc|2H z4pHIo?XFP~@a@h~k??FjqTtc_eV-!}1H-Ouj0_ArfD8tHR*&W%3^h)kodNaLVJt!*InPcOmBWXDtjTSnVs3Jwf#Hc;XPFG!E{umArKZ~VBDbCLo(ds%Wt zRatua#E(*&6%-s;6BmJ;&A`a;SkwW;fP=kI@o#A2*P-GJVh(V%AjTu8xCxs0o5_i) z;*8(H zLBykg8c-!H;ToJ!G`Qdp_k)U0P(W4xVRE3FxKRvHR)7K1Ss7q)CI)nGNHcGqrM8yI ztGp<)BsD%QGbfdyJijO<9>Ld3OU%rH@Uctf7o_GvWO5TT^Nc1tYN~M;mlVYtGJwg+ zNt*AN!r3MVY1uLIPoAh{4kS-%*^3G&K)h=K4RKZ=*K@M0wl=4SIz%Raa-g<3({`=N HUD|2@`$(?6 delta 461 zcmZ1xxgmUl2Ga-4iCTGF+gTaFU_0x?MS6_v8!tNYGv%^Q77-|8tlZo!@RMaSqnL#B z&)@(5zhM3kBn|>up3QGKJdd-efHWT7_|cPVk^=k0Pm-H86dYI?=S+U6D$ckZMAolm z0x9|UpAAGIf$d;%CI)r|2P9Djh67-6W(EN?@#AoDM-=s!aERZ8h}Q!RazfGY1g-&9 z{2f$$0-E{-Kyd*EMj(Oe&_7^tOowtXgVe)3#)GhXH`8V#^|efs^|cfx$7{W0+Ri%J zOWTf-eR8L^IgmW4Z7<5908zdI8d{);ah@!yqs_TN4I;xo*;B`yYriIhr^7JWOGgd> D4joGi diff --git a/build/a.asm b/build/a.asm index bf532f2..2cc2435 100644 --- a/build/a.asm +++ b/build/a.asm @@ -18,17 +18,30 @@ _start: mov rdi, rax mov rax, 60 syscall +word_c_40: + mov rax, [r12] + movzx rax, byte [rax] + mov [r12], rax + ret + ret +word_c_21: + mov rax, [r12] + add r12, 8 + mov rbx, [r12] + mov [rbx], al + ret + ret +word_r_40: + mov rax, [r13] + sub r12, 8 + mov [r12], rax + ret + ret word_strlen: - mov rsi, [r12] ; addr - mov rcx, 0 -strlen_loop: - mov al, [rsi + rcx] - cmp al, 0 - je strlen_done - inc rcx - jmp strlen_loop -strlen_done: - mov [r12], rcx ; len + mov rax, [r12] ; addr + mov rcx, [r12 + 8] ; len + add r12, 16 ; pop len and addr + mov [r12], rcx ; push len ret ret word_puts: @@ -113,6 +126,15 @@ word_dup: sub r12, 8 mov [r12], rax ret +word_write_buf: + mov rdx, [r12] ; len + mov rsi, [r12 + 8] ; addr + add r12, 16 ; pop len + addr + mov rax, 1 ; syscall: write + mov rdi, 1 ; fd = stdout + syscall + ret + ret word_drop: add r12, 8 ret @@ -284,20 +306,22 @@ word__21: add r12, 8 ret word_mmap: - mov r9, [r12] - add r12, 8 - mov r8, [r12] - add r12, 8 - mov r10, [r12] - add r12, 8 - mov rdx, [r12] - add r12, 8 - mov rsi, [r12] - add r12, 8 - mov rdi, [r12] - mov rax, 9 - syscall - mov [r12], rax + ; Save rsp and align to 16 bytes for syscall ABI + mov rax, rsp + and rsp, -16 + mov rdi, [r12+40] ; addr + mov rsi, [r12+32] ; length + mov rdx, [r12+24] ; prot + mov r10, [r12+16] ; flags + mov r8, [r12+8] ; fd + mov r9, [r12] ; offset + add r12, 48 ; pop 6 args + mov rax, 9 ; syscall: mmap + syscall + mov rsp, rax ; restore rsp + sub r12, 8 + mov [r12], rax ; push result + ret ret word_munmap: mov rsi, [r12] diff --git a/build/a.o b/build/a.o index 6e22e17ba7d7abc4a3d497344e9c10b59c2e8dbe..f77941fec56f1d898bc9e0df635340475bc8d704 100644 GIT binary patch literal 4368 zcmbW4eTY<56u|GeyEdy^GlV%YO=J&ZfU+pvtXc1%eFe2FuYISTkvxGK?KoCJG=>yt~wpe32=ic)^_PD!$bm6^w z?(clud(XZ1eY~_K`S_wxNVp{=9ua=ar9yQ1BFSAMEb0UF|B2WaUW=J~*CGYRSr<`e zcNetLzmD-JDxfr}%Dc00;%?A{;o|#)5= z=;dF-0c|B23qy#g?lid$l^wCLR{mQI^(IGfWFk2t=bP-P4s|6vE)74VIp;O!D!OTh zChewC9Q)^Zi!_W&k0n0RMmA!Mvr6p^Npq^*aw1xJMhrJ<(^tBs51D_0KHX=Rz#R=r zOSRhN@x`rL?c6UdTHB=N{Gd<&aqv8V%ZFD0g>c%TE2SGcjN5LM#_Iu(*Wa@Qs=#QR zuXJZB>0FL9&`>BFdS!V`uh=RXzCD;#F~eZI8FijDBp&mmJ1sHY0hNj-5u{Y6Q*zze z5sTiTL?=uOopMpFhJ1I*Fg|(Jg^kJlgjp3Gp?%cY^MMis#(q?ii2-f z?!hp$pY#yy9yt;m*4kiWdL0Cm0R2FV8}5WQJu@F&9*6|nQ0u6EifbD=R>j=;y##f~ z7tp=AfbQ)DbSD?kz2)n)iaI;q>~UNUqzd+c=3LXtH-6VEL$NiuS61nm;~uz0dvJU7 zR3O{s3$3G#IKc+Zx!^4j%yR?ft1~vbRO%^Xos!e}ot=+EW07O$U|&a$orgnx5w1yX z^|$h<&Klobc8$KBhWat^9`m;tE?xOI*jQTx^ofs!F9O>e8bIZ2aD~72=HbK5-}sLb zsh+6E$EAWG;~a0EnyJ;QNLAUB&E*QK1`Ad$qd?rw?zcreld@AHo-P(eytt=mTXrf9 z(t&zGxLE`T*-X*!b1p!yuN zOgn3&OS@DvV}ZN0DD2BxN-7Sfh*6K+(@Lo zkgkw&1sar**hr*3W3*>nZJRH*_qhg?bfdj5pw0TSyB3DK6#f0~?D|W2PsT-5Ayawk zut4d^yAwCs-3(bEDr?K1?||v1!}7)cl$jU!9Yfm&7rIr*yMg;asM3KSbyAG#Wv{=Y%_EZ2t#&vi!>c literal 4240 zcmbW4U1$_n6oBvQMmL(eX&WRDDJV>7rJBZ#wnT#@5Os!buu!p3gkh51n8n@MFgt4$ zA{CZ^;}S|iA4>meOQA0|fCYaHe=TA>PjuwO7 z@9C*6DBau#;ie_)x$h>7YFslaUng|$(sVD-WRp?drkzFosrb5H;Wp{@^MBqoycVri zlg8D9T0*bf6B93_r!cEXPsz2UdukJX>7Facck12+-TMWiw(67fZp$>*^%Y){O&6ud znh@zz+cCyDrB)eaIkkRSq+VGR$D8$qYyHxP%w>K3=hlEH8kE=S_1TN7y0Fv^ee1mL zT{RZ&oVWmB_T+k?x>wUDua$2YP`BGGjkf^47+<#rrbsp3w}y8+?ad~esFc4Fh8Ndr z*dibUTEeLK2s?+(FuV@U@IV#z$Ec>YR_vMNhIdeF{f`oz(&#%TDvM^KLx;0?Q$ipSbV#3kA}hISV;_*?cZ#Q-Yjf}(j`DYFa<09 zHGN^R5p9b^s&;64PwfkQ=*iPH>|K~8synlc?u})1Z!e>JYZ={}p-!)g@Hxo!LCqet z3iiNY6&@-GgVdS9Y8&;ypSRI{uQuI`i)^A;5xzFcd!;?Sd=K_wawd8DJZ#+L=?i-D z^ULs?*Ejws-^Jj`V9%DaYYy$Ceg?c}9$Z%C7Hq2B0&?yaM&+Bx)`lCPYNe3ryKs{Q zaNv9J@m~cLF2(VzQxIfavXe6UD27bTuXEgl}e(s zG+J^U*BS!pSV7Hn?_~3qvJc`l67W2Ui`(_3^edPA3ySA7JB-PB_&D(y#!nEx z&bUYX9^+?-x3Q0*cZqi~{t@wB#y=(gJmX&yKgsxI;_op26Y)Rkb{&uF=-5N{ z{QG>L?0Ur&x6axEF1Ad%1|K7(>&(;R#xePi~&gC;tTb)*^Ak30$ zIWA3|cG1ip&AH|gD__nE_>+_Yy_3({LQQ7ASRC`^OwlHrv9endctLB^&W`7EcGfJ~ z`D2QXIXT-k;iqn`A+pZo4&{7L8Ck{19kP|-NY2icMolu4W{M8l8b|B;PQhLj#ghgtH?JwNy_B-T&sH~lEy<<7Q z9Zo0~teh?I6NGjMKG`mO^k$cd8$znGkTL^12>jJ#y3j;N5j9DoHo#DML=0 and next is a pointer in [data_start, data_end] mov rax, [r12] ; len or int value @@ -100,6 +126,15 @@ word_dup: sub r12, 8 mov [r12], rax ret +word_write_buf: + mov rdx, [r12] ; len + mov rsi, [r12 + 8] ; addr + add r12, 16 ; pop len + addr + mov rax, 1 ; syscall: write + mov rdi, 1 ; fd = stdout + syscall + ret + ret word_drop: add r12, 8 ret @@ -271,20 +306,22 @@ word__21: add r12, 8 ret word_mmap: - mov r9, [r12] - add r12, 8 - mov r8, [r12] - add r12, 8 - mov r10, [r12] - add r12, 8 - mov rdx, [r12] - add r12, 8 - mov rsi, [r12] - add r12, 8 - mov rdi, [r12] - mov rax, 9 - syscall - mov [r12], rax + ; Save rsp and align to 16 bytes for syscall ABI + mov rax, rsp + and rsp, -16 + mov rdi, [r12+40] ; addr + mov rsi, [r12+32] ; length + mov rdx, [r12+24] ; prot + mov r10, [r12+16] ; flags + mov r8, [r12+8] ; fd + mov r9, [r12] ; offset + add r12, 48 ; pop 6 args + mov rax, 9 ; syscall: mmap + syscall + mov rsp, rax ; restore rsp + sub r12, 8 + mov [r12], rax ; push result + ret ret word_munmap: mov rsi, [r12] diff --git a/build/hello.o b/build/hello.o index 5ba708dc99541ab692756f927a73353d1c8a1961..e3e581a8c77bba264915674ad4e8e8b4e7201808 100644 GIT binary patch literal 4384 zcmbW4Z)hAv6u@Vjq+a^RJEfFh^C7|&T4}H8rKLoRB-+X@y`a#jUuw6P+_gD+xr=*y zO{xi2&X#V^P?0K>`Ugb84@E1Y#QMQB7ZYk~!3rW4L~PN5Rjfr*NaTEP=Ix)pCi&pN z?!5WEKQr@Yc6RrL?TN=0X_|10CLR`k%cVlJ`69_}A|z@9^#6(27ha2*d)p!fCRi5{ zW_K5~(Z7cA2r8f~QDsFhZbY)ySvzEuYokVKJfu65BU^!n>yYT-Ple&sMk^IpZB zalSH~8wuxPxQ>QG*)Ym0qDI+P$?)yLtb!Q^<87$(tReB3C&Ous8V;ybG>IUkGM$ne z&aP>fE19M;-kV|pC~lmPueiyQ8wK0PxZT@i=`+fZ+#_YqdXX0gL|dPz#MnLEz*J8 zqoWMjE{!*j)Z+x}bZ6XKAeiSS%GcKD$Wp1NjBS;ip5NQ^adasL#W7 zNx%Oa`KaDDzPaq`eLEfXqu@R2Z!uiD((kabwhQPJkA*J-+Z!4{Ef0FSX#QPZUBtFFWGsKTEzL)qZ#`DBKVtj!3B;zj;zry${ z#H);}_0YsB_9(qW_FEYLfcQ?vph3gg#_-(>u6 z;;Z1RELi>}{wU*%WnMJ#6yp)%`xw8E_yFUpi4QTpfjE982FruQ-)DTATT%DfF0R zCI^)&_NhMmt&E*EyNY{NGi8Chw8$SwTS_YQCy7~kTOl(Jh9u`Qq_vCP`;|KGg-1J5 z$Ne~QKe!q1@W_&Y|mXz6&a`i8J0>5Qw+u%Ys3wbwjA4pXi zx=g{g0)JJRHYCwfL{*Zg{eWxdNhbORi~D5ZcE?A1mcDrC_f&q-D6aN=iJZ|MeP^qx m9An)55B(&-G0sd?#hGM$miRx657IZ)8FYq%=Y~6GZ2t$}v;KIW z8bQNT@FFw^4Qd=%IM=QUt5C5NBsU*W`fFvZDk83Cz-!KXBSE#j9bi@FZ~@eSRYEhjOy!kg!5COByWnWg+H#> z>u;-etF4L?{+)taFf&DW1Mw%P;LnAhg)a&p|BqjR|M1T*25plFEESNM+=q7yufX>T ze+*9xufdNr`2f)jg2ASM=so;`@CEoS;Y&Oob&KDS)9>f8Qq!BX}qpM⪻&%>95Uxfb_ zeht30CD;Ta@BTLt>}m|OGyH(?2kLjV8( diff --git a/build/main.asm b/build/main.asm index e644000..0305d97 100644 --- a/build/main.asm +++ b/build/main.asm @@ -18,6 +18,32 @@ _start: mov rdi, rax mov rax, 60 syscall +word_c_40: + mov rax, [r12] + movzx rax, byte [rax] + mov [r12], rax + ret + ret +word_c_21: + mov rax, [r12] + add r12, 8 + mov rbx, [r12] + mov [rbx], al + ret + ret +word_r_40: + mov rax, [r13] + sub r12, 8 + mov [r12], rax + ret + ret +word_strlen: + mov rax, [r12] ; addr + mov rcx, [r12 + 8] ; len + add r12, 16 ; pop len and addr + mov [r12], rcx ; push len + ret + ret word_puts: ; detects string if top is len>=0 and next is a pointer in [data_start, data_end] mov rax, [r12] ; len or int value @@ -100,6 +126,15 @@ word_dup: sub r12, 8 mov [r12], rax ret +word_write_buf: + mov rdx, [r12] ; len + mov rsi, [r12 + 8] ; addr + add r12, 16 ; pop len + addr + mov rax, 1 ; syscall: write + mov rdi, 1 ; fd = stdout + syscall + ret + ret word_drop: add r12, 8 ret @@ -271,20 +306,22 @@ word__21: add r12, 8 ret word_mmap: - mov r9, [r12] - add r12, 8 - mov r8, [r12] - add r12, 8 - mov r10, [r12] - add r12, 8 - mov rdx, [r12] - add r12, 8 - mov rsi, [r12] - add r12, 8 - mov rdi, [r12] - mov rax, 9 - syscall - mov [r12], rax + ; Save rsp and align to 16 bytes for syscall ABI + mov rax, rsp + and rsp, -16 + mov rdi, [r12+40] ; addr + mov rsi, [r12+32] ; length + mov rdx, [r12+24] ; prot + mov r10, [r12+16] ; flags + mov r8, [r12+8] ; fd + mov r9, [r12] ; offset + add r12, 48 ; pop 6 args + mov rax, 9 ; syscall: mmap + syscall + mov rsp, rax ; restore rsp + sub r12, 8 + mov [r12], rax ; push result + ret ret word_munmap: mov rsi, [r12] diff --git a/build/main.o b/build/main.o index 5f778c49d4b602127f4595df524368d06457a26b..e49159b0685dca0cdb0d7deb0edba54a45e24a0d 100644 GIT binary patch literal 4416 zcmbW4eTY<56u|FucWqX!S;B0?g$gE6&~2U7WJzilKX^}OAy~8i5TCO<<2pDW+nYD8 z(ryXUhRI3xui8vSj7BctF1q!Tdn5}4< zJrsAr82#%QKZuGNjj#A_unEC$F8_mq7DBQ3{P))IMN@bF_2lPvJhv^Nm_38C9H;fS zQDU&`f*-CGTeIp!1bV)9RNcajK|8^M^Z8eS4bKVsy+Rv3g#&1K4Cu?}kBvTp>Tc)P z*yw7MDz8GgG08e+?2u8aj~K;sA>ElA+W<7&fJ6^}CJd)OQZBoCqtp^PREOiu!YKY0 z3TR8QNC-kS8O{>dp|m3s(u;qIp`O^NERfi!+;6O-Jk%NMxHSB@?o8;;kLae4T(Oso z;o85zOSs{@^jPF0eRLhJ_l#0|OVXWkm)wY6oEF24`qb4f=|kqH(WmRoBDkVKVX
XfOXrA(s(uC^Y!;Ef-bNc=c3`< zjyadZ4YU->hEZA?F-o>dhHnpMWy~-bZ$h1C4T;A*8BR;Ya6qM^NdzgC>6F}Xc0`)~ zqeLf6Jb024=8&f%k4%Q4xiCP`(APl_Z#{4ne3H_(NHd5tkO9PRh4E2uk=Xkc^V`a>pKTA;e+B~`w z^XT50NB8zTy0?6tUQ+jtw|iWd1F3=<(4C+3;`LibX(+M+YvmyWbKDJ=rfw{c?h<6X zc&=@%5jWVNJLkLuf_<)~d~Jw~EtY!9*apez{+*qVk@4`cvryOJV-s*wUx42g{o!xq ztvYLcwd@*wJ011o;63h_7#>~mCKT3Y0dwMG;mbgI!vLt<4W95<-adS|>1+Q{BGr@i z5quoF@(PeE@BdS+R!&Y=t1iW-fGeYQ1t0O1k$?q^MY-~96&!ou;u<5aybu5wsggmn zEjWpR(k8f+(b8?Lc5=ThS`%?QE?Rr@dC{8RleaB9-V4%!jOuA@CDUgALy&_@;;kA;^!(u_ihhS7S{)#rRe^*2GT6 zw-bMk@m<6}VSFF)Zy6sUeuwcR#Ft?L1MLkdYl8Flh)0?IN5s1rKTCWk;}?nVW&8)? zFEf6Pc!}|w#E&yRMf?NCRVirV0^>{MSQEc6ejo8Wj6X;`%t~k_@s*6PCEm*Tlf<89 zd@Jz*#(RhlGroiPVaAih-();X{A0!kiBB?KBz}$Yqr|I>zfOEP`&fII_CB}ayevR=P#P2Zv2l3_XBXWlLM#dXtUNo_taaA{(=x6)^ zvft0Re2_!&4l}OmNfY=L8f+aD=M>``iT}-bOmcY%h7r%q!FNf{k^`Ro9+wI6Vp((W z10I)xXaCY1{0Q+{|5KW3J?DE1sdVDeOgxosjpsAM%-eCxrmi)cGn4yMwz)5!E+oZZ z&Ptel=Grz_imp+T{i2s1@6)!w=ZcaDL)t| zX60;!%qSR=oK2C|F7)kH>ZlhU?MNN<<3#=7X0+D}=?ZaIphcO{bwt_|W_!ZbuJPse zKG%SfZnpOYv`Jrf&%$(%B9n1!2D9hcsoWO4usvjvPVXg$!6F92Qv>|(zBC3-_6#^cbCz8gq|$@mQMKN%mAo&=%$7xex$l>h($ delta 1375 zcmZ|ML1+_E5CG7b%{H49)1+t`nuAG9Kt+)h60J~;fnJhW5XDOIprQvaMGry2O9T}R z@!&d&2R#%~5J3cMu^>ug#a=`a#a4bWZO5KM+#IZU6hAHx(k`Y}g) zj5JLc3*$4sfU#w$u_9AC^DHpbFgdT%xzzZZbNoDznGCAeg*!@hGee#J1^>O@t=8A) zWLYV^N$ag`;j#mzmI{L^Ow&ngu~v1D;KiM~Lb&XSTkL0lAp8jXtnlOi@l)*I-SstZ z>?}77^hg(1*%QLY*f$El!`>&{Jvc(4%_{&;cwl#117L>znD9637lgm3*TGor3wI|( zcaHs)@Fn)Q!u|RgVM%y5dyk<9y%2Z325Heq^FUU(dv6Fu;dx%aPxyBBQQ>9wy7qtn zCk%7rmKZp|-V}b6{e$o-`=apE>`|Y02>{Oib#A1VHH_;(wTXoz)wyG;S?xkiZYwrrsd?-tmuIl*9uBWKqM~z4x2dNox cmOAkS%|~Lr=lRIa-p;yTEq!WuNU83`AJJ%xoB#j- diff --git a/build/str.asm b/build/str.asm index aba2433..096670b 100644 --- a/build/str.asm +++ b/build/str.asm @@ -472,7 +472,57 @@ word_read_file: mov qword [r12 + 8], -3 ret ret -word_main: +word_write_file: + ; stack: path_ptr (top), path_len, buf_ptr, buf_len + mov rsi, [r12] ; path_ptr + mov rdx, [r12 + 8] ; path_len + mov r15, [r12 + 16] ; buf_ptr (save in callee-saved r15) + mov r13, [r12 + 24] ; buf_len (save in callee-saved r13) + add r12, 32 ; pop 4 args (we saved buf info) + + ; open(path_ptr, O_WRONLY|O_CREAT|O_TRUNC, 0666) + mov rdi, rsi ; filename + mov rsi, 577 ; flags = O_WRONLY|O_CREAT|O_TRUNC + mov rdx, 438 ; mode = 0o666 + mov rax, 2 ; syscall: open + syscall + cmp rax, 0 + jl .fail_open + mov r9, rax ; save fd + + ; write(fd, buf_ptr, buf_len) -- use preserved r15/r13 which survive syscalls + mov rax, 1 ; syscall: write + mov rdi, r9 ; fd + mov rsi, r15 ; buf_ptr + mov rdx, r13 ; buf_len + syscall + mov r10, rax ; save write result + cmp r10, 0 + jl .fail_write + + ; close(fd) + mov rax, 3 ; syscall: close + mov rdi, r9 + syscall + + sub r12, 8 + mov [r12], r10 + ret + +.fail_write: + mov rax, 3 + mov rdi, r9 + syscall + sub r12, 8 + mov [r12], r10 + ret + +.fail_open: + sub r12, 8 + mov [r12], rax + ret + ret +word_main2: ; push str_0 sub r12, 8 mov qword [r12], str_0 @@ -486,10 +536,22 @@ word_main: sub r12, 8 mov qword [r12], 0 ret +word_main: + ; push str_1 + sub r12, 8 + mov qword [r12], str_1 + ; push 7 + sub r12, 8 + mov qword [r12], 7 + call word_dup + call word_puts + ret section .data data_start: str_0: db 115, 116, 114, 46, 115, 108, 0 str_0_len equ 6 +str_1: db 118, 99, 120, 122, 118, 103, 103, 0 +str_1_len equ 7 data_end: section .bss align 16 diff --git a/build/str.o b/build/str.o index 5c58829ce7817c610523aea611e545b368f41f9f..64e6be2c72f2bd2c58c280d7d759ae356a16efb4 100644 GIT binary patch delta 780 zcmcbh+MqdM0aG~J#6@PD3pg0SfPdmcbH)vmB^m93WF(`#=m)5T1v^9m8<6suyp~a$ z(?9?sl05k#qdDgSVF>TWWJM-JCONjvAxs6V_1z{ap4}lT9KPK(DgwUUIVuvK%|{eG zI=}C8WMW|0wT+R1VF!@Gz|ZQ@{DYy!$+Pp|4xku=Pv?1`&VN3gulQL#I}dp_|6-^S z-oXr!017p~;qdJgQ8|o72qfp($)a-jFpxF*7`s?#&F}yJU$p%L5-va%SpGPR3dpq} zB^;hm4vY=*=L=qt9_e5I{~rda1B2p{BE8}qhO*>}sSQA%*+|Izr@R${% z21Xu%ihn~BzXug(0EHqFcnK9ZK@%c6L1aQIK)GlH=p9W!emfh zlv$D*pO%@E%21wPloF5N>!l@T=0NyJQj-e=MOkwbGxLll&k$7O21ZA`Ap@A4yi;&J cBlqM?A%6=FXy|YQodLEV>Kq$1ar8g|0QRn&UjP6A delta 370 zcmZqByr4Q^0n>KYiHpoQ88{fgfPLaab4G#5l8p91GLq3=Gyp2Gf(@boM7d2~%c#xC zzz-2&p8Sx}oKrvu!aFcok;#xLmvwUpQvvH_M-B<2pTGbAf5H48NE`&RJe%Kecphg_ z0jWL=(E=okON#W0b70)f>o^{zYaHTVnKu98zrr+GPFP{GpYSS1=E*;W R{Uy3tAsV@X6v%EE008P{J_7&% diff --git a/build/test_write_file.asm b/build/test_write_file.asm index 841bc91..a4fb632 100644 --- a/build/test_write_file.asm +++ b/build/test_write_file.asm @@ -526,18 +526,17 @@ word_main: ; push str_0 sub r12, 8 mov qword [r12], str_0 - ; push 22 - sub r12, 8 - mov qword [r12], 22 - call word_swap - ; push str_1 - sub r12, 8 - mov qword [r12], str_1 ; push 27 sub r12, 8 mov qword [r12], 27 call word_swap - call word_2swap + ; push str_1 + sub r12, 8 + mov qword [r12], str_1 + ; push 22 + sub r12, 8 + mov qword [r12], 22 + call word_swap call word_write_file call word_dup ; push 0 @@ -573,10 +572,10 @@ L_if_false_0: ret section .data data_start: -str_0: db 47, 116, 109, 112, 47, 108, 50, 95, 116, 101, 115, 116, 95, 119, 114, 105, 116, 101, 46, 116, 120, 116, 0 -str_0_len equ 22 -str_1: db 104, 101, 108, 108, 111, 32, 102, 114, 111, 109, 32, 119, 114, 105, 116, 101, 95, 102, 105, 108, 101, 32, 116, 101, 115, 116, 10, 0 -str_1_len equ 27 +str_0: db 104, 101, 108, 108, 111, 32, 102, 114, 111, 109, 32, 119, 114, 105, 116, 101, 95, 102, 105, 108, 101, 32, 116, 101, 115, 116, 10, 0 +str_0_len equ 27 +str_1: db 47, 116, 109, 112, 47, 108, 50, 95, 116, 101, 115, 116, 95, 119, 114, 105, 116, 101, 46, 116, 120, 116, 0 +str_1_len equ 22 str_2: db 119, 114, 111, 116, 101, 32, 98, 121, 116, 101, 115, 58, 32, 0 str_2_len equ 13 str_3: db 119, 114, 105, 116, 101, 32, 102, 97, 105, 108, 101, 100, 32, 101, 114, 114, 110, 111, 61, 0 diff --git a/build/test_write_file.o b/build/test_write_file.o index b6082c558ea8ed511122cb60a064d34d94969f02..1851e6dd7d7519566e86fd925286a3163014d7a7 100644 GIT binary patch delta 256 zcmZqB`Jg>v0ps3@3(XlBCf>AXOqeXm2qGhaN*G=on>?LEQ|i-Cpxj#^fghQJI~MH!GN5M;4IXl@_{QfUm~GR&R) HP*ffOpXFRl delta 267 zcmeyM-JmmJ0pp>G3(Xk?Cf>AXESN0G2qGhansn?UlzW=SS%Hcl}H28I_k zzyJTA?7$(Z7!PE;cn>1%{{sn8Aj`A)4TtA(78Rg6h8G7XPvX#&dixV7_X0?u$a($+ z8zN#M3{trZq-HCKPy&h{2I)os{gT`Q{T!qClGNgo`0}F6l2pBtijv9yIb=5*bH=hU z&YC=t-+eNNfB>fqGe{Q`gZSi+{Nj^u@C$5~5SYQLC=N9%pAEv`22voE#!&G^lP`+O F0|0a9VMYJ| diff --git a/stdlib/stdlib.sl b/stdlib/stdlib.sl index 37d4e7f..e39df4c 100644 --- a/stdlib/stdlib.sl +++ b/stdlib/stdlib.sl @@ -26,16 +26,6 @@ } ; -# : strlen ( addr len -- len ) -:asm strlen { - mov rax, [r12] ; addr - mov rcx, [r12 + 8] ; len - add r12, 16 ; pop len and addr - mov [r12], rcx ; push len - ret -} -; - :asm puts { ; detects string if top is len>=0 and next is a pointer in [data_start, data_end] mov rax, [r12] ; len or int value diff --git a/test_write_file.sl b/test_write_file.sl index 002f8f4..7e1c29a 100644 --- a/test_write_file.sl +++ b/test_write_file.sl @@ -2,11 +2,10 @@ import stdlib/stdlib.sl import stdlib/io.sl : main - "/tmp/l2_test_write.txt" # push path (len addr) - swap # -> (addr len) = path_ptr path_len "hello from write_file test\n" # push buf (len addr) swap # -> (addr len) = buf_ptr buf_len - 2swap # reorder pairs -> path_ptr path_len buf_ptr buf_len + "/tmp/l2_test_write.txt" # push path (len addr) + swap # -> (addr len) = path_ptr path_len write_file dup 0 > if "wrote bytes: " puts diff --git a/write b/write index 7daac9ddec99ef0ed0253cc00d237101eccb2ff1..ec3c6047fa1f371fd7a3c02d6e53b40f438f5b03 100755 GIT binary patch delta 235 zcmZpOZit>RgL5w%0~qYxxUg8%P8!I5QSbNTGbUbY delta 235 zcmZpOZit>RgYys@0~j3IxUg8%Sq#X2QSVOUjUVke z#q>*Z3-oi0;!9GCOXACmGD}kRN-9bw|Cg8DY^-pWm2uW&Mm6`z6>0*UqRb#0m>9$- YC#s20_D~bp+@UsumGRJKMV)v?0P3A&zyJUM