From cf02c20bb02f5d2fbfee5557baf68c0e2ca5a042 Mon Sep 17 00:00:00 2001 From: Kartik Agaram Date: Tue, 4 Dec 2018 00:29:06 -0800 Subject: 4832 Let's start adding ':end' labels in all functions, just because it helps us visualize where function calls end in traces, thanks to the '--map' commandline argument. --- html/subx/055trace.subx.html | 113 ++++++++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 56 deletions(-) (limited to 'html/subx/055trace.subx.html') diff --git a/html/subx/055trace.subx.html b/html/subx/055trace.subx.html index 5ffaf069..c0bcedf5 100644 --- a/html/subx/055trace.subx.html +++ b/html/subx/055trace.subx.html @@ -365,62 +365,63 @@ if ('onhashchange' in window) { 299 e8/call _append-4/disp32 300 # . . discard args 301 81 0/subop/add 3/mod/direct 4/rm32/ESP . . . . . 0x10/imm32 # add to ESP -302 # . restore registers -303 59/pop-to-ECX -304 # . epilog -305 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP -306 5d/pop-to-EBP -307 c3/return -308 -309 # 4-argument variant of _append -310 _append-4: # out : address, outend : address, in : address, inend : address -> num_bytes_appended/EAX -311 # . prolog -312 55/push-EBP -313 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP -314 # . save registers -315 51/push-ECX -316 52/push-EDX -317 53/push-EBX -318 56/push-ESI -319 57/push-EDI -320 # EAX/num_bytes_appended = 0 -321 b8/copy-to-EAX 0/imm32 -322 # EDI = out -323 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 7/r32/EDI 0x8/disp8 . # copy *(EBP+8) to EDI -324 # EDX = outend -325 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 2/r32/EDX 0xc/disp8 . # copy *(EBP+12) to EDX -326 # ESI = in -327 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 6/r32/ESI 0x10/disp8 . # copy *(EBP+16) to ESI -328 # ECX = inend -329 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 1/r32/ECX 0x14/disp8 . # copy *(EBP+20) to ECX -330 $_append-4:loop: -331 # if ESI/src >= ECX/srcend break -332 39/compare 3/mod/direct 6/rm32/ESI . . . 1/r32/ECX . . # compare ESI with ECX -333 7d/jump-if-greater-or-equal $_append-4:end/disp8 -334 # if EDI/out >= EDX/outend break (for now silently ignore filled up buffer) -335 39/compare 3/mod/direct 7/rm32/EDI . . . 2/r32/EDX . . # compare EDI with EDX -336 7d/jump-if-greater-or-equal $_append-4:end/disp8 -337 # copy one byte from ESI/src to EDI/out -338 8a/copy-byte 0/mod/indirect 6/rm32/ESI . . . 3/r32/BL . . # copy byte at *ESI to BL -339 88/copy-byte 0/mod/indirect 7/rm32/EDI . . . 3/r32/BL . . # copy byte at BL to *EDI -340 # updates -341 40/increment-EAX -342 46/increment-ESI -343 47/increment-EDI -344 eb/jump $_append-4:loop/disp8 -345 $_append-4:end: -346 # . restore registers -347 5f/pop-to-EDI -348 5e/pop-to-ESI -349 5b/pop-to-EBX -350 5a/pop-to-EDX -351 59/pop-to-ECX -352 # . epilog -353 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP -354 5d/pop-to-EBP -355 c3/return -356 -357 # . . vim:nowrap:textwidth=0 +302 $_append-3:end: +303 # . restore registers +304 59/pop-to-ECX +305 # . epilog +306 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP +307 5d/pop-to-EBP +308 c3/return +309 +310 # 4-argument variant of _append +311 _append-4: # out : address, outend : address, in : address, inend : address -> num_bytes_appended/EAX +312 # . prolog +313 55/push-EBP +314 89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP +315 # . save registers +316 51/push-ECX +317 52/push-EDX +318 53/push-EBX +319 56/push-ESI +320 57/push-EDI +321 # EAX/num_bytes_appended = 0 +322 b8/copy-to-EAX 0/imm32 +323 # EDI = out +324 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 7/r32/EDI 0x8/disp8 . # copy *(EBP+8) to EDI +325 # EDX = outend +326 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 2/r32/EDX 0xc/disp8 . # copy *(EBP+12) to EDX +327 # ESI = in +328 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 6/r32/ESI 0x10/disp8 . # copy *(EBP+16) to ESI +329 # ECX = inend +330 8b/copy 1/mod/*+disp8 4/rm32/sib 5/base/EBP 4/index/none . 1/r32/ECX 0x14/disp8 . # copy *(EBP+20) to ECX +331 $_append-4:loop: +332 # if ESI/src >= ECX/srcend break +333 39/compare 3/mod/direct 6/rm32/ESI . . . 1/r32/ECX . . # compare ESI with ECX +334 7d/jump-if-greater-or-equal $_append-4:end/disp8 +335 # if EDI/out >= EDX/outend break (for now silently ignore filled up buffer) +336 39/compare 3/mod/direct 7/rm32/EDI . . . 2/r32/EDX . . # compare EDI with EDX +337 7d/jump-if-greater-or-equal $_append-4:end/disp8 +338 # copy one byte from ESI/src to EDI/out +339 8a/copy-byte 0/mod/indirect 6/rm32/ESI . . . 3/r32/BL . . # copy byte at *ESI to BL +340 88/copy-byte 0/mod/indirect 7/rm32/EDI . . . 3/r32/BL . . # copy byte at BL to *EDI +341 # updates +342 40/increment-EAX +343 46/increment-ESI +344 47/increment-EDI +345 eb/jump $_append-4:loop/disp8 +346 $_append-4:end: +347 # . restore registers +348 5f/pop-to-EDI +349 5e/pop-to-ESI +350 5b/pop-to-EBX +351 5a/pop-to-EDX +352 59/pop-to-ECX +353 # . epilog +354 89/copy 3/mod/direct 4/rm32/ESP . . . 5/r32/EBP . . # copy EBP to ESP +355 5d/pop-to-EBP +356 c3/return +357 +358 # . . vim:nowrap:textwidth=0 -- cgit 1.4.1-2-gfad0