From 3b5b19df66c0de4f916ba00298c6e000fc69de71 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Mon, 25 May 2020 19:26:18 -0700 Subject: 6406 - primitive 'copy-handle' --- 069allocate.subx | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to '069allocate.subx') diff --git a/069allocate.subx b/069allocate.subx index 0c75ece0..c65a369e 100644 --- a/069allocate.subx +++ b/069allocate.subx @@ -489,6 +489,29 @@ $handle-equal?:end: 5d/pop-to-ebp c3/return +copy-handle: # src: handle, dest: (addr handle) + # . prologue + 55/push-ebp + 89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp + # . save registers + 50/push-eax + 51/push-ecx + # ecx = dest + 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 0x10/disp8 . # copy *(ebp+16) to ecx + # *dest = src + 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 . # copy *(ebp+8) to eax + 89/copy 0/mod/indirect 1/rm32/ecx . . . 0/r32/eax . . # copy eax to *ecx + 8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax + 89/copy 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy eax to *(ecx+4) +$copy-handle:end: + # . restore registers + 59/pop-to-ecx + 58/pop-to-eax + # . epilogue + 89/copy 3/mod/direct 4/rm32/esp . . . 5/r32/ebp . . # copy ebp to esp + 5d/pop-to-ebp + c3/return + # helper: create a nested allocation descriptor (useful for tests) allocate-region: # ad: (addr allocation-descriptor), n: int, out: (addr handle allocation-descriptor) # . prologue -- cgit 1.4.1-2-gfad0