From f293ae63c4afd29d62db4b689bd13c49437121ce Mon Sep 17 00:00:00 2001 From: Bryan English Date: Mon, 9 Feb 2026 09:32:20 -0500 Subject: [PATCH] implement memcopy in stdlib --- rel-lang/stdlib/mem.sorel | 30 ++++++++++++++++++++++++++++++ rel-lang/tests/test1.sorel | 18 ++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/rel-lang/stdlib/mem.sorel b/rel-lang/stdlib/mem.sorel index da5bfca..5ed53c8 100644 --- a/rel-lang/stdlib/mem.sorel +++ b/rel-lang/stdlib/mem.sorel @@ -42,3 +42,33 @@ export free dealloc ; +import "std:out" + +: copy_byte ( addr_from addr_to -- addr_from addr_to ) + swap \ ( addr_to addr_from ) + dup \ ( addr_to addr_from addr_from ) + @:8 \ ( addr_to addr_from byte ) + rot \ ( addr_from byte addr_to ) + dup \ ( addr_from byte addr_to addr_to) + rot \ ( addr_from addr_to addr_to byte ) + swap \ ( addr_from addr_to byte addr_to ) + !:8 \ ( addr_from addr_to ) +; + +export memcopy +: memcopy ( addr_from addr_to count -- ) + dup \ ( addr_from addr_to count count ) + loop \ ( addr_from addr_to count ) + rot \ ( addr_to count addr_from ) + rot \ ( count addr_from addr_to ) + copy_byte \ ( count addr_from addr_to ) + 1 + \ ( count addr_from addr_to+1 ) + rot \ ( addr_from addr_to+1 count ) + 1 - \ ( addr_from addr_to+1 count-1 ) + rot \ ( addr_to+1 count-1 addr_from ) + 1 + \ ( addr_to+1 count-1 addr_from+1 ) + rot rot \ ( addr_from+1 addr_to+1 count-1 ) + dup \ ( addr_from+1 addr_to+1 count-1 count-1) + endloop \ ( addr_from+count addr_to+count 0 ) + drop drop drop \ ( ) +; diff --git a/rel-lang/tests/test1.sorel b/rel-lang/tests/test1.sorel index 8ba7425..3256625 100644 --- a/rel-lang/tests/test1.sorel +++ b/rel-lang/tests/test1.sorel @@ -16,3 +16,21 @@ free 0 assert +import "std:string" +import "std:mem" +import "std:out" + +extern putstack + +16 alloc \ ( ptr ) +dup \ ( ptr ptr ) +"To be copied!" \ ( ptr ptr strptr ) +dup \ ( ptr ptr strptr strptr ) +strlen 1 + \ ( ptr ptr strptr len ) +rot \ ( ptr strptr len ptr ) +swap \ ( ptr strptr ptr len ) +memcopy \ ( ptr ) +puts \ ( ptr ) +free \ ( ) + + -- 2.43.0