5897 - rename comparison instructions
Signed and unsigned don't quite capture the essence of what the different combinations of x86 flags are doing for SubX. The crucial distinction is that one set of comparison operators is for integers and the second is for addresses.
This commit is contained in:
parent
5a6601aba9
commit
6070c23e5e
|
@ -34,7 +34,7 @@ _write: # fd : int, s : (addr array byte)
|
||||||
cd/syscall 0x80/imm8
|
cd/syscall 0x80/imm8
|
||||||
# if (eax < 0) abort
|
# if (eax < 0) abort
|
||||||
3d/compare-eax-with 0/imm32
|
3d/compare-eax-with 0/imm32
|
||||||
0f 8c/jump-if-lesser $_write:abort/disp32
|
0f 8c/jump-if-< $_write:abort/disp32
|
||||||
$_write:end:
|
$_write:end:
|
||||||
# . restore registers
|
# . restore registers
|
||||||
5b/pop-to-ebx
|
5b/pop-to-ebx
|
||||||
|
|
|
@ -78,17 +78,17 @@ kernel-string-equal?: # s : (addr kernel-string), benchmark : (addr array byte)
|
||||||
$kernel-string-equal?:loop:
|
$kernel-string-equal?:loop:
|
||||||
# if (i >= n) break
|
# if (i >= n) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
7d/jump-if-greater-or-equal $kernel-string-equal?:break/disp8
|
7d/jump-if->= $kernel-string-equal?:break/disp8
|
||||||
# c1 = *s1
|
# c1 = *s1
|
||||||
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 0/r32/AL . . # copy byte at *edi to AL
|
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 0/r32/AL . . # copy byte at *edi to AL
|
||||||
# c2 = *s2
|
# c2 = *s2
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 3/r32/BL . . # copy byte at *esi to BL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 3/r32/BL . . # copy byte at *esi to BL
|
||||||
# if (c1 == 0) return false
|
# if (c1 == 0) return false
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $kernel-string-equal?:false/disp8
|
74/jump-if-= $kernel-string-equal?:false/disp8
|
||||||
# if (c1 != c2) return false
|
# if (c1 != c2) return false
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
||||||
75/jump-if-not-equal $kernel-string-equal?:false/disp8
|
75/jump-if-!= $kernel-string-equal?:false/disp8
|
||||||
# ++i
|
# ++i
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# ++s1
|
# ++s1
|
||||||
|
@ -100,7 +100,7 @@ $kernel-string-equal?:break:
|
||||||
# return *s1 == 0
|
# return *s1 == 0
|
||||||
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 0/r32/AL . . # copy byte at *edi to AL
|
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 0/r32/AL . . # copy byte at *edi to AL
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal $kernel-string-equal?:false/disp8
|
75/jump-if-!= $kernel-string-equal?:false/disp8
|
||||||
$kernel-string-equal?:true:
|
$kernel-string-equal?:true:
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
eb/jump $kernel-string-equal?:end/disp8
|
eb/jump $kernel-string-equal?:end/disp8
|
||||||
|
|
|
@ -50,7 +50,7 @@ string-equal?: # s : (addr array byte), benchmark : (addr array byte) -> eax :
|
||||||
$string-equal?:lengths:
|
$string-equal?:lengths:
|
||||||
# if (ecx != benchmark->length) return false
|
# if (ecx != benchmark->length) return false
|
||||||
39/compare 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # compare *edi and ecx
|
39/compare 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # compare *edi and ecx
|
||||||
75/jump-if-not-equal $string-equal?:false/disp8
|
75/jump-if-!= $string-equal?:false/disp8
|
||||||
# var currs/esi : (addr byte) = s->data
|
# var currs/esi : (addr byte) = s->data
|
||||||
81 0/subop/add 3/mod/direct 6/rm32/esi . . . . . 4/imm32 # add to esi
|
81 0/subop/add 3/mod/direct 6/rm32/esi . . . . . 4/imm32 # add to esi
|
||||||
# var maxs/ecx : (addr byte) = &s->data[s->length]
|
# var maxs/ecx : (addr byte) = &s->data[s->length]
|
||||||
|
@ -64,14 +64,14 @@ $string-equal?:lengths:
|
||||||
$string-equal?:loop:
|
$string-equal?:loop:
|
||||||
# if (currs >= maxs) return true
|
# if (currs >= maxs) return true
|
||||||
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi with ecx
|
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi with ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $string-equal?:true/disp8
|
73/jump-if-addr>= $string-equal?:true/disp8
|
||||||
# c1 = *currs
|
# c1 = *currs
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
||||||
# c2 = *currb
|
# c2 = *currb
|
||||||
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 2/r32/DL . . # copy byte at *edi to DL
|
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 2/r32/DL . . # copy byte at *edi to DL
|
||||||
# if (c1 != c2) return false
|
# if (c1 != c2) return false
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax and edx
|
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax and edx
|
||||||
75/jump-if-not-equal $string-equal?:false/disp8
|
75/jump-if-!= $string-equal?:false/disp8
|
||||||
# ++currs
|
# ++currs
|
||||||
46/increment-esi
|
46/increment-esi
|
||||||
# ++currb
|
# ++currb
|
||||||
|
|
|
@ -36,7 +36,7 @@ clear-stream: # f : (addr stream byte)
|
||||||
$clear-stream:loop:
|
$clear-stream:loop:
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $clear-stream:end/disp8
|
73/jump-if-addr>= $clear-stream:end/disp8
|
||||||
# *curr = 0
|
# *curr = 0
|
||||||
c6 0/subop/copy-byte 0/mod/direct 0/rm32/eax . . . . . 0/imm8 # copy byte to *eax
|
c6 0/subop/copy-byte 0/mod/direct 0/rm32/eax . . . . . 0/imm8 # copy byte to *eax
|
||||||
# ++curr
|
# ++curr
|
||||||
|
|
|
@ -117,7 +117,7 @@ trace: # line : (addr array byte)
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# if (eax == 0) return
|
# if (eax == 0) return
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $trace:end/disp8
|
74/jump-if-= $trace:end/disp8
|
||||||
# t->write += eax
|
# t->write += eax
|
||||||
01/add 0/mod/indirect 7/rm32/edi . . . 0/r32/eax . . # add eax to *edi
|
01/add 0/mod/indirect 7/rm32/edi . . . 0/r32/eax . . # add eax to *edi
|
||||||
# refresh ecx = t->write
|
# refresh ecx = t->write
|
||||||
|
@ -335,7 +335,7 @@ trace-scan: # line : (addr array byte) -> result/eax : boolean
|
||||||
$trace-scan:loop:
|
$trace-scan:loop:
|
||||||
# if (Trace-stream->read >= Trace-stream->write) return false
|
# if (Trace-stream->read >= Trace-stream->write) return false
|
||||||
39/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
39/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
||||||
7d/jump-if-greater-or-equal $trace-scan:false/disp8
|
7d/jump-if->= $trace-scan:false/disp8
|
||||||
# eax = next-line-matches?(Trace-stream, line)
|
# eax = next-line-matches?(Trace-stream, line)
|
||||||
# . . push args
|
# . . push args
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
||||||
|
@ -346,7 +346,7 @@ $trace-scan:loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# if (eax == false) continue
|
# if (eax == false) continue
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $trace-scan:continue/disp8
|
74/jump-if-= $trace-scan:continue/disp8
|
||||||
$trace-scan:true:
|
$trace-scan:true:
|
||||||
# skip-next-line(Trace-stream)
|
# skip-next-line(Trace-stream)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -604,12 +604,12 @@ next-line-matches?: # t : (addr stream byte), line : (addr array byte) -> resul
|
||||||
$next-line-matches?:loop:
|
$next-line-matches?:loop:
|
||||||
# if (currl >= maxl) break
|
# if (currl >= maxl) break
|
||||||
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi and ecx
|
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi and ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $next-line-matches?:break/disp8
|
73/jump-if-addr>= $next-line-matches?:break/disp8
|
||||||
# if (currt >= maxt) return false
|
# if (currt >= maxt) return false
|
||||||
# . eax = false
|
# . eax = false
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
39/compare 3/mod/direct 7/rm32/edi . . . 2/r32/edx . . # compare edi and edx
|
39/compare 3/mod/direct 7/rm32/edi . . . 2/r32/edx . . # compare edi and edx
|
||||||
73/jump-if-greater-or-equal-unsigned $next-line-matches?:end/disp8
|
73/jump-if-addr>= $next-line-matches?:end/disp8
|
||||||
# if (*currt != *currl) return false
|
# if (*currt != *currl) return false
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
31/xor 3/mod/direct 3/rm32/eax . . . 3/r32/eax . . # clear ebx
|
31/xor 3/mod/direct 3/rm32/eax . . . 3/r32/eax . . # clear ebx
|
||||||
|
@ -621,7 +621,7 @@ $next-line-matches?:loop:
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
||||||
# . eax = false
|
# . eax = false
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
75/jump-if-not-equal $next-line-matches?:end/disp8
|
75/jump-if-!= $next-line-matches?:end/disp8
|
||||||
# ++currt
|
# ++currt
|
||||||
47/increment-edi
|
47/increment-edi
|
||||||
# ++currl
|
# ++currl
|
||||||
|
@ -635,7 +635,7 @@ $next-line-matches?:break:
|
||||||
3d/compare-eax-and 0xa/imm32/newline
|
3d/compare-eax-and 0xa/imm32/newline
|
||||||
# . eax = false
|
# . eax = false
|
||||||
b8/copy-to-eax 1/imm32/true
|
b8/copy-to-eax 1/imm32/true
|
||||||
74/jump-if-equal $next-line-matches?:end/disp8
|
74/jump-if-= $next-line-matches?:end/disp8
|
||||||
b8/copy-to-eax 0/imm32/true
|
b8/copy-to-eax 0/imm32/true
|
||||||
$next-line-matches?:end:
|
$next-line-matches?:end:
|
||||||
# . restore registers
|
# . restore registers
|
||||||
|
@ -771,14 +771,14 @@ skip-next-line: # t : (addr stream byte)
|
||||||
$skip-next-line:loop:
|
$skip-next-line:loop:
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx and ebx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx and ebx
|
||||||
73/jump-if-greater-or-equal-unsigned $skip-next-line:end/disp8
|
73/jump-if-addr>= $skip-next-line:end/disp8
|
||||||
# ++i
|
# ++i
|
||||||
42/increment-edx
|
42/increment-edx
|
||||||
# if (*curr == '\n') break
|
# if (*curr == '\n') break
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/eax . . # copy *ecx to eax
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/eax . . # copy *ecx to eax
|
||||||
3d/compare-eax-and 0a/imm32/newline
|
3d/compare-eax-and 0a/imm32/newline
|
||||||
74/jump-if-equal $skip-next-line:end/disp8
|
74/jump-if-= $skip-next-line:end/disp8
|
||||||
# ++curr
|
# ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# loop
|
# loop
|
||||||
|
@ -917,10 +917,10 @@ _append-4: # out : (addr byte), outend : (addr byte), in : (addr byte), inend :
|
||||||
$_append-4:loop:
|
$_append-4:loop:
|
||||||
# if (in >= inend) break
|
# if (in >= inend) break
|
||||||
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi with ecx
|
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi with ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $_append-4:end/disp8
|
73/jump-if-addr>= $_append-4:end/disp8
|
||||||
# if (out >= outend) abort # just to catch test failures fast
|
# if (out >= outend) abort # just to catch test failures fast
|
||||||
39/compare 3/mod/direct 7/rm32/edi . . . 2/r32/edx . . # compare edi with edx
|
39/compare 3/mod/direct 7/rm32/edi . . . 2/r32/edx . . # compare edi with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $_append-4:abort/disp8
|
73/jump-if-addr>= $_append-4:abort/disp8
|
||||||
# *out = *in
|
# *out = *in
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 3/r32/BL . . # copy byte at *esi to BL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 3/r32/BL . . # copy byte at *esi to BL
|
||||||
88/copy-byte 0/mod/indirect 7/rm32/edi . . . 3/r32/BL . . # copy byte at BL to *edi
|
88/copy-byte 0/mod/indirect 7/rm32/edi . . . 3/r32/BL . . # copy byte at BL to *edi
|
||||||
|
|
|
@ -27,7 +27,7 @@ write: # f : fd or (addr stream byte), s : (addr array byte)
|
||||||
89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp
|
89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp
|
||||||
# if (f < 0x08000000) _write(f, s) and return # f can't be a user-mode address, so treat it as a kernel file descriptor
|
# if (f < 0x08000000) _write(f, s) and return # f can't be a user-mode address, so treat it as a kernel file descriptor
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x08000000/imm32 # compare *(ebp+8)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x08000000/imm32 # compare *(ebp+8)
|
||||||
73/jump-if-greater-unsigned-or-equal $write:fake/disp8
|
73/jump-if-addr>= $write:fake/disp8
|
||||||
# . . push args
|
# . . push args
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12)
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
||||||
|
|
|
@ -28,7 +28,7 @@ stream-data-equal?: # f : (addr stream byte), s : (addr array byte) -> eax : bo
|
||||||
$stream-data-equal?:compare-lengths:
|
$stream-data-equal?:compare-lengths:
|
||||||
# if (f->write != s->length) return false
|
# if (f->write != s->length) return false
|
||||||
39/compare 0/mod/indirect 7/rm32/edi . . . 0/r32/eax . . # compare *edi and eax
|
39/compare 0/mod/indirect 7/rm32/edi . . . 0/r32/eax . . # compare *edi and eax
|
||||||
75/jump-if-not-equal $stream-data-equal?:false/disp8
|
75/jump-if-!= $stream-data-equal?:false/disp8
|
||||||
# var currs/edi : (addr byte) = s->data
|
# var currs/edi : (addr byte) = s->data
|
||||||
81 0/subop/add 3/mod/direct 7/rm32/edi . . . . . 4/imm32 # add to edi
|
81 0/subop/add 3/mod/direct 7/rm32/edi . . . . . 4/imm32 # add to edi
|
||||||
# var eax : byte = 0
|
# var eax : byte = 0
|
||||||
|
@ -38,14 +38,14 @@ $stream-data-equal?:compare-lengths:
|
||||||
$stream-data-equal?:loop:
|
$stream-data-equal?:loop:
|
||||||
# if (currf >= maxf) return true
|
# if (currf >= maxf) return true
|
||||||
39/compare 3/mod/direct 6/rm32/esi . . . 2/r32/edx . . # compare esi with edx
|
39/compare 3/mod/direct 6/rm32/esi . . . 2/r32/edx . . # compare esi with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $stream-data-equal?:true/disp8
|
73/jump-if-addr>= $stream-data-equal?:true/disp8
|
||||||
# AL = *currs
|
# AL = *currs
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
||||||
# CL = *curr
|
# CL = *curr
|
||||||
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 1/r32/CL . . # copy byte at *edi to CL
|
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 1/r32/CL . . # copy byte at *edi to CL
|
||||||
# if (eax != ecx) return false
|
# if (eax != ecx) return false
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax and ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax and ecx
|
||||||
75/jump-if-not-equal $stream-data-equal?:false/disp8
|
75/jump-if-!= $stream-data-equal?:false/disp8
|
||||||
# ++f
|
# ++f
|
||||||
46/increment-esi
|
46/increment-esi
|
||||||
# ++curr
|
# ++curr
|
||||||
|
@ -287,20 +287,20 @@ next-stream-line-equal?: # f : (addr stream byte), s : (addr array byte) -> eax
|
||||||
$next-stream-line-equal?:loop:
|
$next-stream-line-equal?:loop:
|
||||||
# if (currf >= f->write) break
|
# if (currf >= f->write) break
|
||||||
3b/compare 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # compare ecx with *esi
|
3b/compare 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # compare ecx with *esi
|
||||||
7d/jump-if-greater-or-equal $next-stream-line-equal?:break/disp8
|
7d/jump-if->= $next-stream-line-equal?:break/disp8
|
||||||
# c1 = f->data[f->read]
|
# c1 = f->data[f->read]
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# if (c1 == '\n') break
|
# if (c1 == '\n') break
|
||||||
3d/compare-eax-and 0xa/imm32/newline
|
3d/compare-eax-and 0xa/imm32/newline
|
||||||
74/jump-if-equal $next-stream-line-equal?:break/disp8
|
74/jump-if-= $next-stream-line-equal?:break/disp8
|
||||||
# if (currs >= s->length) return false
|
# if (currs >= s->length) return false
|
||||||
3b/compare 0/mod/indirect 7/rm32/edi . . . 2/r32/edx . . # compare edx with *edi
|
3b/compare 0/mod/indirect 7/rm32/edi . . . 2/r32/edx . . # compare edx with *edi
|
||||||
7d/jump-if-greater-or-equal $next-stream-line-equal?:false/disp8
|
7d/jump-if->= $next-stream-line-equal?:false/disp8
|
||||||
# c2 = s->data[currs]
|
# c2 = s->data[currs]
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 7/base/edi 2/index/edx . 3/r32/BL 4/disp8 . # copy byte at *(edi+edx+4) to BL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 7/base/edi 2/index/edx . 3/r32/BL 4/disp8 . # copy byte at *(edi+edx+4) to BL
|
||||||
# if (c1 != c2) return false
|
# if (c1 != c2) return false
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
||||||
75/jump-if-not-equal $next-stream-line-equal?:false/disp8
|
75/jump-if-!= $next-stream-line-equal?:false/disp8
|
||||||
# ++currf
|
# ++currf
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# ++currs
|
# ++currs
|
||||||
|
@ -311,7 +311,7 @@ $next-stream-line-equal?:break:
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# if (currs >= s->length) return true
|
# if (currs >= s->length) return true
|
||||||
3b/compare 0/mod/indirect 7/rm32/edi . . . 2/r32/edx . . # compare edx with *edi
|
3b/compare 0/mod/indirect 7/rm32/edi . . . 2/r32/edx . . # compare edx with *edi
|
||||||
7c/jump-if-lesser $next-stream-line-equal?:false/disp8
|
7c/jump-if-< $next-stream-line-equal?:false/disp8
|
||||||
$next-stream-line-equal?:true:
|
$next-stream-line-equal?:true:
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
# persist f->read on success
|
# persist f->read on success
|
||||||
|
|
|
@ -95,7 +95,7 @@ stop: # ed : (addr exit-descriptor), value : int
|
||||||
8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none . 0/r32/eax 4/disp8 . # copy *(esp+4) to eax
|
8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none . 0/r32/eax 4/disp8 . # copy *(esp+4) to eax
|
||||||
# if (ed->target == 0) really exit
|
# if (ed->target == 0) really exit
|
||||||
81 7/subop/compare 0/mod/indirect 0/rm32/eax . . . . . 0/imm32 # compare *eax
|
81 7/subop/compare 0/mod/indirect 0/rm32/eax . . . . . 0/imm32 # compare *eax
|
||||||
75/jump-if-not-equal $stop:fake/disp8
|
75/jump-if-!= $stop:fake/disp8
|
||||||
# . syscall(exit, value)
|
# . syscall(exit, value)
|
||||||
8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none . 3/r32/ebx 8/disp8 . # copy *(esp+8) to ebx
|
8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none . 3/r32/ebx 8/disp8 . # copy *(esp+8) to ebx
|
||||||
b8/copy-to-eax 1/imm32/exit
|
b8/copy-to-eax 1/imm32/exit
|
||||||
|
|
|
@ -51,7 +51,7 @@ read: # f : fd or (addr stream byte), s : (addr stream byte) -> num-bytes-read/
|
||||||
89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp
|
89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp
|
||||||
# if (f < 0x08000000) return _read(f, s) # f can't be a user-mode address, so treat it as a kernel file descriptor
|
# if (f < 0x08000000) return _read(f, s) # f can't be a user-mode address, so treat it as a kernel file descriptor
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x08000000/imm32 # compare *(ebp+8)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x08000000/imm32 # compare *(ebp+8)
|
||||||
73/jump-if-greater-unsigned-or-equal $read:fake/disp8
|
73/jump-if-addr>= $read:fake/disp8
|
||||||
# . . push args
|
# . . push args
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12)
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
||||||
|
@ -165,10 +165,10 @@ _buffer-4: # out : address, outend : address, in : address, inend : address ->
|
||||||
$_buffer-4:loop:
|
$_buffer-4:loop:
|
||||||
# if (in >= inend) break
|
# if (in >= inend) break
|
||||||
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi with ecx
|
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi with ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $_buffer-4:end/disp8
|
73/jump-if-addr>= $_buffer-4:end/disp8
|
||||||
# if (out >= outend) break # for now silently ignore filled up buffer
|
# if (out >= outend) break # for now silently ignore filled up buffer
|
||||||
39/compare 3/mod/direct 7/rm32/edi . . . 2/r32/edx . . # compare edi with edx
|
39/compare 3/mod/direct 7/rm32/edi . . . 2/r32/edx . . # compare edi with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $_buffer-4:end/disp8
|
73/jump-if-addr>= $_buffer-4:end/disp8
|
||||||
# *out = *in
|
# *out = *in
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 3/r32/BL . . # copy byte at *esi to BL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 3/r32/BL . . # copy byte at *esi to BL
|
||||||
88/copy-byte 0/mod/indirect 7/rm32/edi . . . 3/r32/BL . . # copy byte at BL to *edi
|
88/copy-byte 0/mod/indirect 7/rm32/edi . . . 3/r32/BL . . # copy byte at BL to *edi
|
||||||
|
|
|
@ -48,7 +48,7 @@ read-byte-buffered: # f : (addr buffered-file) -> byte-or-Eof/eax
|
||||||
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 . # copy *(esi+8) to ecx
|
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 . # copy *(esi+8) to ecx
|
||||||
# if (f->read >= f->write) populate stream from file
|
# if (f->read >= f->write) populate stream from file
|
||||||
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
||||||
7c/jump-if-lesser $read-byte-buffered:from-stream/disp8
|
7c/jump-if-< $read-byte-buffered:from-stream/disp8
|
||||||
# . clear-stream(stream = f+4)
|
# . clear-stream(stream = f+4)
|
||||||
# . . push args
|
# . . push args
|
||||||
8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy esi+4 to eax
|
8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy esi+4 to eax
|
||||||
|
@ -69,7 +69,7 @@ read-byte-buffered: # f : (addr buffered-file) -> byte-or-Eof/eax
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# if (eax == 0) return 0xffffffff
|
# if (eax == 0) return 0xffffffff
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal $read-byte-buffered:from-stream/disp8
|
75/jump-if-!= $read-byte-buffered:from-stream/disp8
|
||||||
b8/copy-to-eax 0xffffffff/imm32/Eof
|
b8/copy-to-eax 0xffffffff/imm32/Eof
|
||||||
eb/jump $read-byte-buffered:end/disp8
|
eb/jump $read-byte-buffered:end/disp8
|
||||||
$read-byte-buffered:from-stream:
|
$read-byte-buffered:from-stream:
|
||||||
|
|
|
@ -21,7 +21,7 @@ write-stream: # f : fd or (addr stream byte), s : (addr stream byte)
|
||||||
89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp
|
89/copy 3/mod/direct 5/rm32/ebp . . . 4/r32/esp . . # copy esp to ebp
|
||||||
# if (f < 0x08000000) _write-stream(f, s), return # f can't be a user-mode address, so treat it as a kernel file descriptor
|
# if (f < 0x08000000) _write-stream(f, s), return # f can't be a user-mode address, so treat it as a kernel file descriptor
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x08000000/imm32 # compare *(ebp+8)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x08000000/imm32 # compare *(ebp+8)
|
||||||
73/jump-if-greater-unsigned-or-equal $write-stream:fake/disp8
|
73/jump-if-addr>= $write-stream:fake/disp8
|
||||||
# . . push args
|
# . . push args
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 . # push *(ebp+12)
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
||||||
|
@ -104,7 +104,7 @@ _write-stream: # fd : int, s : (addr stream byte)
|
||||||
cd/syscall 0x80/imm8
|
cd/syscall 0x80/imm8
|
||||||
# if (eax < 0) abort
|
# if (eax < 0) abort
|
||||||
3d/compare-eax-with 0/imm32
|
3d/compare-eax-with 0/imm32
|
||||||
0f 8c/jump-if-lesser $_write-stream:abort/disp32
|
0f 8c/jump-if-< $_write-stream:abort/disp32
|
||||||
# s->read += eax
|
# s->read += eax
|
||||||
01/add 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # add eax to *(esi+4)
|
01/add 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # add eax to *(esi+4)
|
||||||
# . restore registers
|
# . restore registers
|
||||||
|
|
|
@ -43,7 +43,7 @@ write-byte-buffered: # f : (addr buffered-file), n : int
|
||||||
8b/copy 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 4/disp8 . # copy *(edi+4) to ecx
|
8b/copy 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 4/disp8 . # copy *(edi+4) to ecx
|
||||||
# if (f->write >= f->length) flush and clear f's stream
|
# if (f->write >= f->length) flush and clear f's stream
|
||||||
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 0xc/disp8 . # compare ecx with *(edi+12)
|
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 0xc/disp8 . # compare ecx with *(edi+12)
|
||||||
7c/jump-if-lesser $write-byte-buffered:to-stream/disp8
|
7c/jump-if-< $write-byte-buffered:to-stream/disp8
|
||||||
# . flush(f)
|
# . flush(f)
|
||||||
# . . push args
|
# . . push args
|
||||||
57/push-edi
|
57/push-edi
|
||||||
|
@ -218,7 +218,7 @@ append-byte: # f : (addr stream byte), n : int
|
||||||
8b/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # copy *edi to ecx
|
8b/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # copy *edi to ecx
|
||||||
# if (f->write >= f->length) abort
|
# if (f->write >= f->length) abort
|
||||||
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 8/disp8 . # compare ecx with *(edi+8)
|
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 8/disp8 . # compare ecx with *(edi+8)
|
||||||
7d/jump-if-greater-or-equal $append-byte:abort/disp8
|
7d/jump-if->= $append-byte:abort/disp8
|
||||||
$append-byte:to-stream:
|
$append-byte:to-stream:
|
||||||
# write to stream
|
# write to stream
|
||||||
# f->data[f->write] = LSB(n)
|
# f->data[f->write] = LSB(n)
|
||||||
|
|
|
@ -52,10 +52,10 @@ write-buffered: # f : (addr buffered-file), msg : (addr array byte)
|
||||||
$write-buffered:loop:
|
$write-buffered:loop:
|
||||||
# if (in >= inend) break
|
# if (in >= inend) break
|
||||||
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi with ecx
|
39/compare 3/mod/direct 6/rm32/esi . . . 1/r32/ecx . . # compare esi with ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $write-buffered:loop-end/disp8
|
73/jump-if-addr>= $write-buffered:loop-end/disp8
|
||||||
# if (f->write >= f->length) flush and clear f's stream
|
# if (f->write >= f->length) flush and clear f's stream
|
||||||
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx with edx
|
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx with edx
|
||||||
7c/jump-if-lesser $write-buffered:to-stream/disp8
|
7c/jump-if-< $write-buffered:to-stream/disp8
|
||||||
# . persist f->write
|
# . persist f->write
|
||||||
89/copy 1/mod/*+disp8 7/rm32/edi . . . 3/r32/ebx 4/disp8 . # copy ebx to *(edi+4)
|
89/copy 1/mod/*+disp8 7/rm32/edi . . . 3/r32/ebx 4/disp8 . # copy ebx to *(edi+4)
|
||||||
# . flush(f)
|
# . flush(f)
|
||||||
|
|
|
@ -10,7 +10,7 @@ to-hex-char: # in/eax : int -> out/eax : int
|
||||||
# no error checking; accepts argument in eax
|
# no error checking; accepts argument in eax
|
||||||
# if (eax <= 9) return eax + '0'
|
# if (eax <= 9) return eax + '0'
|
||||||
3d/compare-eax-with 0x9/imm32/9
|
3d/compare-eax-with 0x9/imm32/9
|
||||||
7f/jump-if-greater $to-hex-char:else/disp8
|
7f/jump-if-> $to-hex-char:else/disp8
|
||||||
05/add-to-eax 0x30/imm32/0
|
05/add-to-eax 0x30/imm32/0
|
||||||
c3/return
|
c3/return
|
||||||
$to-hex-char:else:
|
$to-hex-char:else:
|
||||||
|
@ -206,7 +206,7 @@ $print-int32:print-hex-prefix:
|
||||||
$print-int32:loop:
|
$print-int32:loop:
|
||||||
# if (ecx < 0) break
|
# if (ecx < 0) break
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0/imm32 # compare ecx
|
||||||
7c/jump-if-lesser $print-int32:end/disp8
|
7c/jump-if-< $print-int32:end/disp8
|
||||||
# eax = n >> ecx
|
# eax = n >> ecx
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
||||||
d3/>>ecx 5/subop/pad-zeroes 3/mod/direct 0/rm32/eax . . . . . . # shift eax right by ecx bits, padding zeroes
|
d3/>>ecx 5/subop/pad-zeroes 3/mod/direct 0/rm32/eax . . . . . . # shift eax right by ecx bits, padding zeroes
|
||||||
|
@ -294,7 +294,7 @@ $print-int32-buffered:print-hex-prefix:
|
||||||
$print-int32-buffered:loop:
|
$print-int32-buffered:loop:
|
||||||
# if (ecx < 0) break
|
# if (ecx < 0) break
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0/imm32 # compare ecx
|
||||||
7c/jump-if-lesser $print-int32-buffered:end/disp8
|
7c/jump-if-< $print-int32-buffered:end/disp8
|
||||||
# eax = n >> ecx
|
# eax = n >> ecx
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
||||||
d3/>>ecx 5/subop/pad-zeroes 3/mod/direct 0/rm32/eax . . . . . . # shift eax right by ecx bits, padding zeroes
|
d3/>>ecx 5/subop/pad-zeroes 3/mod/direct 0/rm32/eax . . . . . . # shift eax right by ecx bits, padding zeroes
|
||||||
|
|
|
@ -23,13 +23,13 @@ is-hex-int?: # in : (addr slice) -> eax : boolean
|
||||||
# if s is empty return false
|
# if s is empty return false
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $is-hex-int?:end/disp8
|
73/jump-if-addr>= $is-hex-int?:end/disp8
|
||||||
# skip past leading '-'
|
# skip past leading '-'
|
||||||
# . if (*curr == '-') ++curr
|
# . if (*curr == '-') ++curr
|
||||||
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
|
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x2d/imm32/- # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x2d/imm32/- # compare ebx
|
||||||
75/jump-if-not-equal $is-hex-int?:initial-0/disp8
|
75/jump-if-!= $is-hex-int?:initial-0/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# skip past leading '0x'
|
# skip past leading '0x'
|
||||||
|
@ -38,24 +38,24 @@ $is-hex-int?:initial-0:
|
||||||
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
|
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x30/imm32/0 # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x30/imm32/0 # compare ebx
|
||||||
75/jump-if-not-equal $is-hex-int?:loop/disp8
|
75/jump-if-!= $is-hex-int?:loop/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
$is-hex-int?:initial-0x:
|
$is-hex-int?:initial-0x:
|
||||||
# . if (curr >= in->end) return true
|
# . if (curr >= in->end) return true
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $is-hex-int?:true/disp8
|
73/jump-if-addr>= $is-hex-int?:true/disp8
|
||||||
# . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again
|
# . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again
|
||||||
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
|
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x78/imm32/x # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x78/imm32/x # compare ebx
|
||||||
75/jump-if-not-equal $is-hex-int?:loop/disp8
|
75/jump-if-!= $is-hex-int?:loop/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
$is-hex-int?:loop:
|
$is-hex-int?:loop:
|
||||||
# if (curr >= in->end) return true
|
# if (curr >= in->end) return true
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $is-hex-int?:true/disp8
|
73/jump-if-addr>= $is-hex-int?:true/disp8
|
||||||
# var eax : boolean = is-hex-digit?(*curr)
|
# var eax : boolean = is-hex-digit?(*curr)
|
||||||
# . . push args
|
# . . push args
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
|
@ -66,7 +66,7 @@ $is-hex-int?:loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# if (eax == false) return false
|
# if (eax == false) return false
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $is-hex-int?:end/disp8
|
74/jump-if-= $is-hex-int?:end/disp8
|
||||||
# ++curr
|
# ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# loop
|
# loop
|
||||||
|
@ -375,7 +375,7 @@ $parse-hex-int:negative:
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
3d/compare-eax-and 0x2d/imm32/-
|
3d/compare-eax-and 0x2d/imm32/-
|
||||||
75/jump-if-not-equal $parse-hex-int:initial-0/disp8
|
75/jump-if-!= $parse-hex-int:initial-0/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# . negate = true
|
# . negate = true
|
||||||
|
@ -385,24 +385,24 @@ $parse-hex-int:initial-0:
|
||||||
# . if (*curr != '0') jump to loop
|
# . if (*curr != '0') jump to loop
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
3d/compare-eax-and 0x30/imm32/0
|
3d/compare-eax-and 0x30/imm32/0
|
||||||
75/jump-if-not-equal $parse-hex-int:loop/disp8
|
75/jump-if-!= $parse-hex-int:loop/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
$parse-hex-int:initial-0x:
|
$parse-hex-int:initial-0x:
|
||||||
# . if (curr >= in->end) return result
|
# . if (curr >= in->end) return result
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $parse-hex-int:end/disp8
|
73/jump-if-addr>= $parse-hex-int:end/disp8
|
||||||
# . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again
|
# . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
3d/compare-eax-and 0x78/imm32/x
|
3d/compare-eax-and 0x78/imm32/x
|
||||||
75/jump-if-not-equal $parse-hex-int:loop/disp8
|
75/jump-if-!= $parse-hex-int:loop/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
$parse-hex-int:loop:
|
$parse-hex-int:loop:
|
||||||
# if (curr >= in->end) break
|
# if (curr >= in->end) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $parse-hex-int:negate/disp8
|
73/jump-if-addr>= $parse-hex-int:negate/disp8
|
||||||
# var eax : int = from-hex-char(*curr)
|
# var eax : int = from-hex-char(*curr)
|
||||||
# . . copy arg to eax
|
# . . copy arg to eax
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
|
@ -418,7 +418,7 @@ $parse-hex-int:loop:
|
||||||
$parse-hex-int:negate:
|
$parse-hex-int:negate:
|
||||||
# if (negate?) result = -result
|
# if (negate?) result = -result
|
||||||
81 7/subop/compare 3/mod/direct 6/rm32/esi . . . . . 0/imm32/false # compare esi
|
81 7/subop/compare 3/mod/direct 6/rm32/esi . . . . . 0/imm32/false # compare esi
|
||||||
74/jump-if-equal $parse-hex-int:end/disp8
|
74/jump-if-= $parse-hex-int:end/disp8
|
||||||
f7 3/subop/negate 3/mod/direct 3/rm32/ebx . . . . . . # negate ebx
|
f7 3/subop/negate 3/mod/direct 3/rm32/ebx . . . . . . # negate ebx
|
||||||
$parse-hex-int:end:
|
$parse-hex-int:end:
|
||||||
# return result
|
# return result
|
||||||
|
@ -647,18 +647,18 @@ is-hex-digit?: # c : byte -> eax : boolean
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 8/disp8 . # copy *(ebp+8) to ecx
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 8/disp8 . # copy *(ebp+8) to ecx
|
||||||
# return false if c < '0'
|
# return false if c < '0'
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x30/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x30/imm32 # compare ecx
|
||||||
7c/jump-if-lesser $is-hex-digit?:false/disp8
|
7c/jump-if-< $is-hex-digit?:false/disp8
|
||||||
# return true if c <= '9'
|
# return true if c <= '9'
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x39/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x39/imm32 # compare ecx
|
||||||
7e/jump-if-lesser-or-equal $is-hex-digit?:true/disp8
|
7e/jump-if-<= $is-hex-digit?:true/disp8
|
||||||
# drop case
|
# drop case
|
||||||
25/and-eax-with 0x5f/imm32
|
25/and-eax-with 0x5f/imm32
|
||||||
# return false if c > 'f'
|
# return false if c > 'f'
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x66/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x66/imm32 # compare ecx
|
||||||
7f/jump-if-greater $is-hex-digit?:false/disp8
|
7f/jump-if-> $is-hex-digit?:false/disp8
|
||||||
# return true if c >= 'a'
|
# return true if c >= 'a'
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x61/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x61/imm32 # compare ecx
|
||||||
7d/jump-if-greater-or-equal $is-hex-digit?:true/disp8
|
7d/jump-if->= $is-hex-digit?:true/disp8
|
||||||
# otherwise return false
|
# otherwise return false
|
||||||
$is-hex-digit?:false:
|
$is-hex-digit?:false:
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
|
@ -804,15 +804,15 @@ from-hex-char: # in/eax : byte -> out/eax : nibble
|
||||||
$from-hex-char:check0:
|
$from-hex-char:check0:
|
||||||
# if (eax < '0') goto abort
|
# if (eax < '0') goto abort
|
||||||
3d/compare-eax-with 0x30/imm32/0
|
3d/compare-eax-with 0x30/imm32/0
|
||||||
7c/jump-if-lesser $from-hex-char:abort/disp8
|
7c/jump-if-< $from-hex-char:abort/disp8
|
||||||
$from-hex-char:check1:
|
$from-hex-char:check1:
|
||||||
# if (eax > 'f') goto abort
|
# if (eax > 'f') goto abort
|
||||||
3d/compare-eax-with 0x66/imm32/f
|
3d/compare-eax-with 0x66/imm32/f
|
||||||
7f/jump-if-greater $from-hex-char:abort/disp8
|
7f/jump-if-> $from-hex-char:abort/disp8
|
||||||
$from-hex-char:check2:
|
$from-hex-char:check2:
|
||||||
# if (eax > '9') goto next check
|
# if (eax > '9') goto next check
|
||||||
3d/compare-eax-with 0x39/imm32/9
|
3d/compare-eax-with 0x39/imm32/9
|
||||||
7f/jump-if-greater $from-hex-char:check3/disp8
|
7f/jump-if-> $from-hex-char:check3/disp8
|
||||||
$from-hex-char:digit:
|
$from-hex-char:digit:
|
||||||
# return eax - '0'
|
# return eax - '0'
|
||||||
2d/subtract-from-eax 0x30/imm32/0
|
2d/subtract-from-eax 0x30/imm32/0
|
||||||
|
@ -820,7 +820,7 @@ $from-hex-char:digit:
|
||||||
$from-hex-char:check3:
|
$from-hex-char:check3:
|
||||||
# if (eax < 'a') goto abort
|
# if (eax < 'a') goto abort
|
||||||
3d/compare-eax-with 0x61/imm32/a
|
3d/compare-eax-with 0x61/imm32/a
|
||||||
7c/jump-if-lesser $from-hex-char:abort/disp8
|
7c/jump-if-< $from-hex-char:abort/disp8
|
||||||
$from-hex-char:letter:
|
$from-hex-char:letter:
|
||||||
# return eax - ('a'-10)
|
# return eax - ('a'-10)
|
||||||
2d/subtract-from-eax 0x57/imm32/a-10
|
2d/subtract-from-eax 0x57/imm32/a-10
|
||||||
|
|
|
@ -72,7 +72,7 @@ allocate: # ad : (addr allocation-descriptor), n : int -> address-or-null/eax :
|
||||||
89/copy 3/mod/direct 2/rm32/edx . . . 0/r32/eax . . # copy eax to edx
|
89/copy 3/mod/direct 2/rm32/edx . . . 0/r32/eax . . # copy eax to edx
|
||||||
03/add 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0xc/disp8 . # add *(ebp+12) to edx
|
03/add 1/mod/*+disp8 5/rm32/ebp . . . 2/r32/edx 0xc/disp8 . # add *(ebp+12) to edx
|
||||||
3b/compare 1/mod/*+disp8 1/rm32/ecx . . . 2/r32/edx 4/disp8 . # compare edx with *(ecx+4)
|
3b/compare 1/mod/*+disp8 1/rm32/ecx . . . 2/r32/edx 4/disp8 . # compare edx with *(ecx+4)
|
||||||
73/jump-if-greater-or-equal-signed $allocate:abort/disp8
|
73/jump-if->=-signed $allocate:abort/disp8
|
||||||
$allocate:commit:
|
$allocate:commit:
|
||||||
# update ad->curr
|
# update ad->curr
|
||||||
89/copy 0/mod/indirect 1/rm32/ecx . . . 2/r32/edx . . # copy edx to *ecx
|
89/copy 0/mod/indirect 1/rm32/ecx . . . 2/r32/edx . . # copy edx to *ecx
|
||||||
|
@ -196,7 +196,7 @@ allocate-region: # ad : (addr allocation-descriptor), n : int -> new-ad : (hand
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# if (eax == 0) abort
|
# if (eax == 0) abort
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $allocate-region:abort/disp8
|
74/jump-if-= $allocate-region:abort/disp8
|
||||||
# earmark 8 bytes at the start for a new allocation descriptor
|
# earmark 8 bytes at the start for a new allocation descriptor
|
||||||
# . *eax = eax + 8
|
# . *eax = eax + 8
|
||||||
89/copy 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . . # copy eax to ecx
|
89/copy 3/mod/direct 1/rm32/ecx . . . 0/r32/eax . . # copy eax to ecx
|
||||||
|
|
|
@ -19,7 +19,7 @@ new-stream: # ad : (addr allocation-descriptor), length : int, elemsize : int -
|
||||||
f7 4/subop/multiply 1/mod/*+disp8 5/rm32/ebp . . 0xc/disp8 . # multiply *(ebp+12) into eax
|
f7 4/subop/multiply 1/mod/*+disp8 5/rm32/ebp . . 0xc/disp8 . # multiply *(ebp+12) into eax
|
||||||
# . if overflow abort
|
# . if overflow abort
|
||||||
81 7/subop/compare 3/mod/direct 2/rm32/edx . . . . . 0/imm32 # compare edx
|
81 7/subop/compare 3/mod/direct 2/rm32/edx . . . . . 0/imm32 # compare edx
|
||||||
75/jump-if-not-equal $new-stream:abort/disp8
|
75/jump-if-!= $new-stream:abort/disp8
|
||||||
# . edx = elemsize*length
|
# . edx = elemsize*length
|
||||||
89/copy 3/mod/direct 2/rm32/edx . . . 0/r32/eax . . # copy eax to edx
|
89/copy 3/mod/direct 2/rm32/edx . . . 0/r32/eax . . # copy eax to edx
|
||||||
# . eax += 12
|
# . eax += 12
|
||||||
|
|
|
@ -37,10 +37,10 @@ read-line-buffered: # f : (addr buffered-file), s : (addr stream byte)
|
||||||
$read-line-buffered:loop:
|
$read-line-buffered:loop:
|
||||||
# if (s->write >= s->length) abort
|
# if (s->write >= s->length) abort
|
||||||
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 2/r32/edx 8/disp8 . # compare edx with *(edi+8)
|
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 2/r32/edx 8/disp8 . # compare edx with *(edi+8)
|
||||||
7d/jump-if-greater-or-equal $read-line-buffered:abort/disp8
|
7d/jump-if->= $read-line-buffered:abort/disp8
|
||||||
# if (f->read >= f->write) populate stream from file
|
# if (f->read >= f->write) populate stream from file
|
||||||
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
||||||
7c/jump-if-lesser $read-line-buffered:from-stream/disp8
|
7c/jump-if-< $read-line-buffered:from-stream/disp8
|
||||||
# . clear-stream(stream = f+4)
|
# . clear-stream(stream = f+4)
|
||||||
# . . push args
|
# . . push args
|
||||||
8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy esi+4 to eax
|
8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy esi+4 to eax
|
||||||
|
@ -63,7 +63,7 @@ $read-line-buffered:loop:
|
||||||
# since f->read was initially 0, eax is the same as f->write
|
# since f->read was initially 0, eax is the same as f->write
|
||||||
# . if (eax == 0) return true
|
# . if (eax == 0) return true
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $read-line-buffered:end/disp8
|
74/jump-if-= $read-line-buffered:end/disp8
|
||||||
$read-line-buffered:from-stream:
|
$read-line-buffered:from-stream:
|
||||||
# AL = f->data[f->read]
|
# AL = f->data[f->read]
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
|
@ -76,7 +76,7 @@ $read-line-buffered:from-stream:
|
||||||
42/increment-edx
|
42/increment-edx
|
||||||
# if (AL == '\n') return
|
# if (AL == '\n') return
|
||||||
3d/compare-eax-and 0xa/imm32
|
3d/compare-eax-and 0xa/imm32
|
||||||
75/jump-if-not-equal $read-line-buffered:loop/disp8
|
75/jump-if-!= $read-line-buffered:loop/disp8
|
||||||
$read-line-buffered:end:
|
$read-line-buffered:end:
|
||||||
# save f->read
|
# save f->read
|
||||||
89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 . # copy ecx to *(esi+8)
|
89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 . # copy ecx to *(esi+8)
|
||||||
|
@ -246,10 +246,10 @@ read-line: # f : (addr stream byte), s : (addr stream byte)
|
||||||
$read-line:loop:
|
$read-line:loop:
|
||||||
# if (s->write >= s->length) abort
|
# if (s->write >= s->length) abort
|
||||||
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 2/r32/edx 8/disp8 . # compare edx with *(edi+8)
|
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 2/r32/edx 8/disp8 . # compare edx with *(edi+8)
|
||||||
0f 8d/jump-if-greater-or-equal $read-line:abort/disp32
|
0f 8d/jump-if->= $read-line:abort/disp32
|
||||||
# if (f->read >= f->write) break
|
# if (f->read >= f->write) break
|
||||||
3b/compare 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # compare ecx with *esi
|
3b/compare 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # compare ecx with *esi
|
||||||
7d/jump-if-greater-or-equal $read-line:end/disp8
|
7d/jump-if->= $read-line:end/disp8
|
||||||
# AL = f->data[f->read]
|
# AL = f->data[f->read]
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
|
@ -261,7 +261,7 @@ $read-line:loop:
|
||||||
42/increment-edx
|
42/increment-edx
|
||||||
# if (AL == '\n') return
|
# if (AL == '\n') return
|
||||||
3d/compare-eax-and 0xa/imm32
|
3d/compare-eax-and 0xa/imm32
|
||||||
0f 85/jump-if-not-equal $read-line:loop/disp32
|
0f 85/jump-if-!= $read-line:loop/disp32
|
||||||
$read-line:end:
|
$read-line:end:
|
||||||
# save f->read
|
# save f->read
|
||||||
89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # copy ecx to *(esi+4)
|
89/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # copy ecx to *(esi+4)
|
||||||
|
|
|
@ -20,7 +20,7 @@ slice-empty?: # s : (addr slice) -> eax : boolean
|
||||||
# . compare eax and s->end
|
# . compare eax and s->end
|
||||||
39/compare 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # compare eax and *(ecx+4)
|
39/compare 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # compare eax and *(ecx+4)
|
||||||
b8/copy-to-eax 1/imm32/true
|
b8/copy-to-eax 1/imm32/true
|
||||||
74/jump-if-equal $slice-empty?:end/disp8
|
74/jump-if-= $slice-empty?:end/disp8
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
$slice-empty?:end:
|
$slice-empty?:end:
|
||||||
# . restore registers
|
# . restore registers
|
||||||
|
@ -129,16 +129,16 @@ slice-equal?: # s : (addr slice), p : (addr array byte) -> eax : boolean
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 3/r32/ebx 0xc/disp8 . # copy *(ebp+12) to ebx
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 3/r32/ebx 0xc/disp8 . # copy *(ebp+12) to ebx
|
||||||
# if (p != 0) goto next check
|
# if (p != 0) goto next check
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32 # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32 # compare ebx
|
||||||
75/jump-if-not-equal $slice-equal?:nonnull-string/disp8
|
75/jump-if-!= $slice-equal?:nonnull-string/disp8
|
||||||
$slice-equal?:null-string:
|
$slice-equal?:null-string:
|
||||||
# return s->start == s->end
|
# return s->start == s->end
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $slice-equal?:true/disp8
|
74/jump-if-= $slice-equal?:true/disp8
|
||||||
eb/jump $slice-equal?:false/disp8
|
eb/jump $slice-equal?:false/disp8
|
||||||
$slice-equal?:nonnull-string:
|
$slice-equal?:nonnull-string:
|
||||||
# if (slen != p->length) return false
|
# if (slen != p->length) return false
|
||||||
39/compare 0/mod/indirect 3/rm32/ebx . . . 0/r32/eax . . # compare *ebx and eax
|
39/compare 0/mod/indirect 3/rm32/ebx . . . 0/r32/eax . . # compare *ebx and eax
|
||||||
75/jump-if-not-equal $slice-equal?:false/disp8
|
75/jump-if-!= $slice-equal?:false/disp8
|
||||||
# var currp/ebx : (addr byte) = p->data
|
# var currp/ebx : (addr byte) = p->data
|
||||||
81 0/subop/add 3/mod/direct 3/rm32/ebx . . . . . 4/imm32 # add to ebx
|
81 0/subop/add 3/mod/direct 3/rm32/ebx . . . . . 4/imm32 # add to ebx
|
||||||
# var c1/eax : byte = 0
|
# var c1/eax : byte = 0
|
||||||
|
@ -148,14 +148,14 @@ $slice-equal?:nonnull-string:
|
||||||
$slice-equal?:loop:
|
$slice-equal?:loop:
|
||||||
# if (currs >= maxs) return true
|
# if (currs >= maxs) return true
|
||||||
39/compare 3/mod/direct 2/rm32/edx . . . 6/r32/esi . . # compare edx with esi
|
39/compare 3/mod/direct 2/rm32/edx . . . 6/r32/esi . . # compare edx with esi
|
||||||
73/jump-if-greater-or-equal-unsigned $slice-equal?:true/disp8
|
73/jump-if-addr>= $slice-equal?:true/disp8
|
||||||
# c1 = *currp
|
# c1 = *currp
|
||||||
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
||||||
# c2 = *currs
|
# c2 = *currs
|
||||||
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 1/r32/CL . . # copy byte at *edx to CL
|
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 1/r32/CL . . # copy byte at *edx to CL
|
||||||
# if (c1 != c2) return false
|
# if (c1 != c2) return false
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax and ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax and ecx
|
||||||
75/jump-if-not-equal $slice-equal?:false/disp8
|
75/jump-if-!= $slice-equal?:false/disp8
|
||||||
# ++currp
|
# ++currp
|
||||||
43/increment-ebx
|
43/increment-ebx
|
||||||
# ++currs
|
# ++currs
|
||||||
|
@ -497,7 +497,7 @@ slice-starts-with?: # s : (addr slice), head : (addr array byte) -> eax : boole
|
||||||
8b/copy 0/mod/indirect 7/rm32/edi . . . 2/r32/edx . . # copy *edi to edx
|
8b/copy 0/mod/indirect 7/rm32/edi . . . 2/r32/edx . . # copy *edi to edx
|
||||||
# if (lenh > lens) return false
|
# if (lenh > lens) return false
|
||||||
39/compare 3/mod/direct 2/rm32/edx . . . 1/r32/ecx . . # compare edx with ecx
|
39/compare 3/mod/direct 2/rm32/edx . . . 1/r32/ecx . . # compare edx with ecx
|
||||||
7f/jump-if-greater $slice-starts-with?:false/disp8
|
7f/jump-if-> $slice-starts-with?:false/disp8
|
||||||
# var currs/esi : (addr byte) = s->start
|
# var currs/esi : (addr byte) = s->start
|
||||||
8b/subtract 0/mod/indirect 6/rm32/esi . . . 6/r32/esi . . # copy *esi to esi
|
8b/subtract 0/mod/indirect 6/rm32/esi . . . 6/r32/esi . . # copy *esi to esi
|
||||||
# var currh/edi : (addr byte) = head->data
|
# var currh/edi : (addr byte) = head->data
|
||||||
|
@ -511,14 +511,14 @@ slice-starts-with?: # s : (addr slice), head : (addr array byte) -> eax : boole
|
||||||
$slice-starts-with?:loop:
|
$slice-starts-with?:loop:
|
||||||
# if (i >= lenh) return true
|
# if (i >= lenh) return true
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
7d/jump-if-greater-or-equal $slice-starts-with?:true/disp8
|
7d/jump-if->= $slice-starts-with?:true/disp8
|
||||||
# c1 = *currs
|
# c1 = *currs
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
||||||
# c2 = *currh
|
# c2 = *currh
|
||||||
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 3/r32/BL . . # copy byte at *edi to BL
|
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 3/r32/BL . . # copy byte at *edi to BL
|
||||||
# if (c1 != c2) return false
|
# if (c1 != c2) return false
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
||||||
75/jump-if-not-equal $slice-starts-with?:false/disp8
|
75/jump-if-!= $slice-starts-with?:false/disp8
|
||||||
# ++i
|
# ++i
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# ++currs
|
# ++currs
|
||||||
|
@ -787,10 +787,10 @@ write-slice: # out : (addr stream byte), s : (addr slice)
|
||||||
$write-slice:loop:
|
$write-slice:loop:
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 6/r32/esi . . # compare ecx with esi
|
39/compare 3/mod/direct 1/rm32/ecx . . . 6/r32/esi . . # compare ecx with esi
|
||||||
73/jump-if-greater-or-equal-unsigned $write-slice:loop-end/disp8
|
73/jump-if-addr>= $write-slice:loop-end/disp8
|
||||||
# if (out->write >= out->length) abort
|
# if (out->write >= out->length) abort
|
||||||
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx with edx
|
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx with edx
|
||||||
7d/jump-if-greater-or-equal $write-slice:abort/disp8
|
7d/jump-if->= $write-slice:abort/disp8
|
||||||
# out->data[out->write] = *in
|
# out->data[out->write] = *in
|
||||||
# . AL = *in
|
# . AL = *in
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
|
@ -903,10 +903,10 @@ write-slice-buffered: # out : (addr buffered-file), s : (addr slice)
|
||||||
$write-slice-buffered:loop:
|
$write-slice-buffered:loop:
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 6/r32/esi . . # compare ecx with esi
|
39/compare 3/mod/direct 1/rm32/ecx . . . 6/r32/esi . . # compare ecx with esi
|
||||||
73/jump-if-greater-or-equal-unsigned $write-slice-buffered:loop-end/disp8
|
73/jump-if-addr>= $write-slice-buffered:loop-end/disp8
|
||||||
# if (out->write >= out->length) flush and clear out's stream
|
# if (out->write >= out->length) flush and clear out's stream
|
||||||
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx with edx
|
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx with edx
|
||||||
7c/jump-if-lesser $write-slice-buffered:to-stream/disp8
|
7c/jump-if-< $write-slice-buffered:to-stream/disp8
|
||||||
# . persist out->write
|
# . persist out->write
|
||||||
89/copy 1/mod/*+disp8 7/rm32/edi . . . 3/r32/ebx 4/disp8 . # copy ebx to *(edi+4)
|
89/copy 1/mod/*+disp8 7/rm32/edi . . . 3/r32/ebx 4/disp8 . # copy ebx to *(edi+4)
|
||||||
# . flush(out)
|
# . flush(out)
|
||||||
|
@ -1041,7 +1041,7 @@ slice-to-string: # ad : (addr allocation-descriptor), in : (addr slice) -> out/
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# if (eax == 0) abort
|
# if (eax == 0) abort
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $slice-to-string:abort/disp8
|
74/jump-if-= $slice-to-string:abort/disp8
|
||||||
# out->length = size-4
|
# out->length = size-4
|
||||||
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
||||||
81 5/subop/subtract 0/mod/indirect 0/rm32/eax . . . . . 4/imm32 # subtract 4 from *eax
|
81 5/subop/subtract 0/mod/indirect 0/rm32/eax . . . . . 4/imm32 # subtract 4 from *eax
|
||||||
|
|
|
@ -359,13 +359,13 @@ skip-chars-matching: # in : (addr stream byte), delimiter : byte
|
||||||
$skip-chars-matching:loop:
|
$skip-chars-matching:loop:
|
||||||
# if (in->read >= in->write) break
|
# if (in->read >= in->write) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
||||||
7d/jump-if-greater-or-equal $skip-chars-matching:end/disp8
|
7d/jump-if->= $skip-chars-matching:end/disp8
|
||||||
# eax = in->data[in->read]
|
# eax = in->data[in->read]
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# if (eax != delimiter) break
|
# if (eax != delimiter) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax and edx
|
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax and edx
|
||||||
75/jump-if-not-equal $skip-chars-matching:end/disp8
|
75/jump-if-!= $skip-chars-matching:end/disp8
|
||||||
# ++in->read
|
# ++in->read
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
eb/jump $skip-chars-matching:loop/disp8
|
eb/jump $skip-chars-matching:loop/disp8
|
||||||
|
@ -479,22 +479,22 @@ skip-chars-matching-whitespace: # in : (addr stream byte)
|
||||||
$skip-chars-matching-whitespace:loop:
|
$skip-chars-matching-whitespace:loop:
|
||||||
# if (in->read >= in->write) break
|
# if (in->read >= in->write) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
||||||
7d/jump-if-greater-or-equal $skip-chars-matching-whitespace:end/disp8
|
7d/jump-if->= $skip-chars-matching-whitespace:end/disp8
|
||||||
# eax = in->data[in->read]
|
# eax = in->data[in->read]
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# if (eax == ' ') goto body
|
# if (eax == ' ') goto body
|
||||||
3d/compare-eax-and 0x20/imm32/space
|
3d/compare-eax-and 0x20/imm32/space
|
||||||
74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
|
74/jump-if-= $skip-chars-matching-whitespace:body/disp8
|
||||||
# if (eax == '\n') goto body
|
# if (eax == '\n') goto body
|
||||||
3d/compare-eax-and 0x0a/imm32/newline
|
3d/compare-eax-and 0x0a/imm32/newline
|
||||||
74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
|
74/jump-if-= $skip-chars-matching-whitespace:body/disp8
|
||||||
# if (eax == '\t') goto body
|
# if (eax == '\t') goto body
|
||||||
3d/compare-eax-and 0x09/imm32/tab
|
3d/compare-eax-and 0x09/imm32/tab
|
||||||
74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
|
74/jump-if-= $skip-chars-matching-whitespace:body/disp8
|
||||||
# if (eax != '\r') break
|
# if (eax != '\r') break
|
||||||
3d/compare-eax-and 0x0d/imm32/cr
|
3d/compare-eax-and 0x0d/imm32/cr
|
||||||
75/jump-if-not-equal $skip-chars-matching-whitespace:end/disp8
|
75/jump-if-!= $skip-chars-matching-whitespace:end/disp8
|
||||||
$skip-chars-matching-whitespace:body:
|
$skip-chars-matching-whitespace:body:
|
||||||
# ++in->read
|
# ++in->read
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
|
@ -572,13 +572,13 @@ skip-chars-not-matching: # in : (addr stream byte), delimiter : byte
|
||||||
$skip-chars-not-matching:loop:
|
$skip-chars-not-matching:loop:
|
||||||
# if (in->read >= in->write) break
|
# if (in->read >= in->write) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
||||||
7d/jump-if-greater-or-equal $skip-chars-not-matching:end/disp8
|
7d/jump-if->= $skip-chars-not-matching:end/disp8
|
||||||
# eax = in->data[in->read]
|
# eax = in->data[in->read]
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# if (eax == delimiter) break
|
# if (eax == delimiter) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax and edx
|
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax and edx
|
||||||
74/jump-if-equal $skip-chars-not-matching:end/disp8
|
74/jump-if-= $skip-chars-not-matching:end/disp8
|
||||||
# ++in->read
|
# ++in->read
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
eb/jump $skip-chars-not-matching:loop/disp8
|
eb/jump $skip-chars-not-matching:loop/disp8
|
||||||
|
@ -731,22 +731,22 @@ skip-chars-not-matching-whitespace: # in : (addr stream byte)
|
||||||
$skip-chars-not-matching-whitespace:loop:
|
$skip-chars-not-matching-whitespace:loop:
|
||||||
# if (in->read >= in->write) break
|
# if (in->read >= in->write) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
||||||
7d/jump-if-greater-or-equal $skip-chars-not-matching-whitespace:end/disp8
|
7d/jump-if->= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
# eax = in->data[in->read]
|
# eax = in->data[in->read]
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# if (eax == ' ') break
|
# if (eax == ' ') break
|
||||||
3d/compare-eax-and 0x20/imm32/space
|
3d/compare-eax-and 0x20/imm32/space
|
||||||
74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
|
74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
# if (eax == '\n') break
|
# if (eax == '\n') break
|
||||||
3d/compare-eax-and 0x0a/imm32/newline
|
3d/compare-eax-and 0x0a/imm32/newline
|
||||||
74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
|
74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
# if (eax == '\t') break
|
# if (eax == '\t') break
|
||||||
3d/compare-eax-and 0x09/imm32/tab
|
3d/compare-eax-and 0x09/imm32/tab
|
||||||
74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
|
74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
# if (eax == '\r') break
|
# if (eax == '\r') break
|
||||||
3d/compare-eax-and 0x0d/imm32/cr
|
3d/compare-eax-and 0x0d/imm32/cr
|
||||||
74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
|
74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
# ++in->read
|
# ++in->read
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
eb/jump $skip-chars-not-matching-whitespace:loop/disp8
|
eb/jump $skip-chars-not-matching-whitespace:loop/disp8
|
||||||
|
@ -820,12 +820,12 @@ skip-chars-matching-in-slice: # curr : (addr byte), end : (addr byte), delimite
|
||||||
$skip-chars-matching-in-slice:loop:
|
$skip-chars-matching-in-slice:loop:
|
||||||
# if (curr >= end) break
|
# if (curr >= end) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp8
|
73/jump-if-addr>= $skip-chars-matching-in-slice:end/disp8
|
||||||
# c = *curr
|
# c = *curr
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . . # copy byte at *eax to BL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . . # copy byte at *eax to BL
|
||||||
# if (c != delimiter) break
|
# if (c != delimiter) break
|
||||||
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx and edx
|
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx and edx
|
||||||
75/jump-if-not-equal $skip-chars-matching-in-slice:end/disp8
|
75/jump-if-!= $skip-chars-matching-in-slice:end/disp8
|
||||||
# ++curr
|
# ++curr
|
||||||
40/increment-eax
|
40/increment-eax
|
||||||
eb/jump $skip-chars-matching-in-slice:loop/disp8
|
eb/jump $skip-chars-matching-in-slice:loop/disp8
|
||||||
|
@ -913,21 +913,21 @@ skip-chars-matching-whitespace-in-slice: # curr : (addr byte), end : (addr byte
|
||||||
$skip-chars-matching-whitespace-in-slice:loop:
|
$skip-chars-matching-whitespace-in-slice:loop:
|
||||||
# if (curr >= end) break
|
# if (curr >= end) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
||||||
0f 83/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp32
|
0f 83/jump-if-addr>= $skip-chars-matching-in-slice:end/disp32
|
||||||
# c = *curr
|
# c = *curr
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . . # copy byte at *eax to BL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . . # copy byte at *eax to BL
|
||||||
# if (c == ' ') goto body
|
# if (c == ' ') goto body
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x20/imm32/space # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x20/imm32/space # compare ebx
|
||||||
74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
|
74/jump-if-= $skip-chars-matching-whitespace-in-slice:body/disp8
|
||||||
# if (c == '\n') goto body
|
# if (c == '\n') goto body
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0a/imm32/newline # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0a/imm32/newline # compare ebx
|
||||||
74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
|
74/jump-if-= $skip-chars-matching-whitespace-in-slice:body/disp8
|
||||||
# if (c == '\t') goto body
|
# if (c == '\t') goto body
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x09/imm32/tab # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x09/imm32/tab # compare ebx
|
||||||
74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
|
74/jump-if-= $skip-chars-matching-whitespace-in-slice:body/disp8
|
||||||
# if (c != '\r') break
|
# if (c != '\r') break
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0d/imm32/cr # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0d/imm32/cr # compare ebx
|
||||||
75/jump-if-not-equal $skip-chars-matching-whitespace-in-slice:end/disp8
|
75/jump-if-!= $skip-chars-matching-whitespace-in-slice:end/disp8
|
||||||
$skip-chars-matching-whitespace-in-slice:body:
|
$skip-chars-matching-whitespace-in-slice:body:
|
||||||
# ++curr
|
# ++curr
|
||||||
40/increment-eax
|
40/increment-eax
|
||||||
|
@ -989,12 +989,12 @@ skip-chars-not-matching-in-slice: # curr : (addr byte), end : (addr byte), deli
|
||||||
$skip-chars-not-matching-in-slice:loop:
|
$skip-chars-not-matching-in-slice:loop:
|
||||||
# if (curr >= end) break
|
# if (curr >= end) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp8
|
73/jump-if-addr>= $skip-chars-not-matching-in-slice:end/disp8
|
||||||
# c = *curr
|
# c = *curr
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . . # copy byte at *eax to BL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . . # copy byte at *eax to BL
|
||||||
# if (c == delimiter) break
|
# if (c == delimiter) break
|
||||||
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx and edx
|
39/compare 3/mod/direct 3/rm32/ebx . . . 2/r32/edx . . # compare ebx and edx
|
||||||
74/jump-if-equal $skip-chars-not-matching-in-slice:end/disp8
|
74/jump-if-= $skip-chars-not-matching-in-slice:end/disp8
|
||||||
# ++curr
|
# ++curr
|
||||||
40/increment-eax
|
40/increment-eax
|
||||||
eb/jump $skip-chars-not-matching-in-slice:loop/disp8
|
eb/jump $skip-chars-not-matching-in-slice:loop/disp8
|
||||||
|
@ -1111,21 +1111,21 @@ skip-chars-not-matching-whitespace-in-slice: # curr : (addr byte), end : (addr
|
||||||
$skip-chars-not-matching-whitespace-in-slice:loop:
|
$skip-chars-not-matching-whitespace-in-slice:loop:
|
||||||
# if (curr >= end) break
|
# if (curr >= end) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
||||||
0f 83/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp32
|
0f 83/jump-if-addr>= $skip-chars-not-matching-in-slice:end/disp32
|
||||||
# c = *curr
|
# c = *curr
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . . # copy byte at *eax to BL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 3/r32/BL . . # copy byte at *eax to BL
|
||||||
# if (c == ' ') break
|
# if (c == ' ') break
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x20/imm32/space # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x20/imm32/space # compare ebx
|
||||||
74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
||||||
# if (c == '\n') break
|
# if (c == '\n') break
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0a/imm32/newline # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0a/imm32/newline # compare ebx
|
||||||
74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
||||||
# if (c == '\t') break
|
# if (c == '\t') break
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x09/imm32/tab # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x09/imm32/tab # compare ebx
|
||||||
74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
||||||
# if (c == '\r') break
|
# if (c == '\r') break
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0d/imm32/cr # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x0d/imm32/cr # compare ebx
|
||||||
74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
||||||
# ++curr
|
# ++curr
|
||||||
40/increment-eax
|
40/increment-eax
|
||||||
eb/jump $skip-chars-not-matching-whitespace-in-slice:loop/disp8
|
eb/jump $skip-chars-not-matching-whitespace-in-slice:loop/disp8
|
||||||
|
@ -1429,17 +1429,17 @@ skip-string-in-slice: # curr : (addr byte), end : (addr byte) -> new_curr/eax
|
||||||
$skip-string-in-slice:loop:
|
$skip-string-in-slice:loop:
|
||||||
# if (curr >= end) return curr
|
# if (curr >= end) return curr
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-unsigned-or-equal $skip-string-in-slice:return-curr/disp8
|
73/jump-if-addr>= $skip-string-in-slice:return-curr/disp8
|
||||||
# c = *curr
|
# c = *curr
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
$skip-string-in-slice:dquote:
|
$skip-string-in-slice:dquote:
|
||||||
# if (c == '"') break
|
# if (c == '"') break
|
||||||
3d/compare-eax-and 0x22/imm32/double-quote
|
3d/compare-eax-and 0x22/imm32/double-quote
|
||||||
74/jump-if-equal $skip-string-in-slice:break/disp8
|
74/jump-if-= $skip-string-in-slice:break/disp8
|
||||||
$skip-string-in-slice:check-for-escape:
|
$skip-string-in-slice:check-for-escape:
|
||||||
# if (c == '\') escape next char
|
# if (c == '\') escape next char
|
||||||
3d/compare-eax-and 0x5c/imm32/backslash
|
3d/compare-eax-and 0x5c/imm32/backslash
|
||||||
75/jump-if-not-equal $skip-string-in-slice:continue/disp8
|
75/jump-if-!= $skip-string-in-slice:continue/disp8
|
||||||
$skip-string-in-slice:escape:
|
$skip-string-in-slice:escape:
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
$skip-string-in-slice:continue:
|
$skip-string-in-slice:continue:
|
||||||
|
@ -1801,13 +1801,13 @@ skip-until-close-paren-in-slice: # curr : (addr byte), end : (addr byte) -> new
|
||||||
$skip-until-close-paren-in-slice:loop:
|
$skip-until-close-paren-in-slice:loop:
|
||||||
# if (curr >= end) break
|
# if (curr >= end) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-unsigned-or-equal $skip-until-close-paren-in-slice:break/disp8
|
73/jump-if-addr>= $skip-until-close-paren-in-slice:break/disp8
|
||||||
# c = *curr
|
# c = *curr
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
$skip-until-close-paren-in-slice:check-close:
|
$skip-until-close-paren-in-slice:check-close:
|
||||||
# if (c == ')') break
|
# if (c == ')') break
|
||||||
3d/compare-eax-and 0x29/imm32/close-paren
|
3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
74/jump-if-equal $skip-until-close-paren-in-slice:break/disp8
|
74/jump-if-= $skip-until-close-paren-in-slice:break/disp8
|
||||||
# ++curr
|
# ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
eb/jump $skip-until-close-paren-in-slice:loop/disp8
|
eb/jump $skip-until-close-paren-in-slice:loop/disp8
|
||||||
|
|
|
@ -51,7 +51,7 @@ print-int32-decimal: # out : (addr stream byte), n : int32
|
||||||
# var eax : int = abs(n)
|
# var eax : int = abs(n)
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
||||||
3d/compare-eax-with 0/imm32
|
3d/compare-eax-with 0/imm32
|
||||||
7d/jump-if-greater-or-equal $print-int32-decimal:read-loop/disp8
|
7d/jump-if->= $print-int32-decimal:read-loop/disp8
|
||||||
$print-int32-decimal:negative:
|
$print-int32-decimal:negative:
|
||||||
f7 3/subop/negate 3/mod/direct 0/rm32/eax . . . . . . # negate eax
|
f7 3/subop/negate 3/mod/direct 0/rm32/eax . . . . . . # negate eax
|
||||||
$print-int32-decimal:read-loop:
|
$print-int32-decimal:read-loop:
|
||||||
|
@ -64,11 +64,11 @@ $print-int32-decimal:read-loop:
|
||||||
52/push-edx
|
52/push-edx
|
||||||
# if (eax == 0) break
|
# if (eax == 0) break
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
7f/jump-if-greater $print-int32-decimal:read-loop/disp8
|
7f/jump-if-> $print-int32-decimal:read-loop/disp8
|
||||||
$print-int32-decimal:read-break:
|
$print-int32-decimal:read-break:
|
||||||
# if (n < 0) push('-')
|
# if (n < 0) push('-')
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 0/imm32 # compare *(ebp+12)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 0/imm32 # compare *(ebp+12)
|
||||||
7d/jump-if-greater-or-equal $print-int32-decimal:write/disp8
|
7d/jump-if->= $print-int32-decimal:write/disp8
|
||||||
$print-int32-decimal:push-negative:
|
$print-int32-decimal:push-negative:
|
||||||
68/push 0x2d/imm32/-
|
68/push 0x2d/imm32/-
|
||||||
$print-int32-decimal:write:
|
$print-int32-decimal:write:
|
||||||
|
@ -86,10 +86,10 @@ $print-int32-decimal:write-loop:
|
||||||
58/pop-to-eax
|
58/pop-to-eax
|
||||||
# if (eax == sentinel) break
|
# if (eax == sentinel) break
|
||||||
3d/compare-eax-and 0/imm32/sentinel
|
3d/compare-eax-and 0/imm32/sentinel
|
||||||
74/jump-if-equal $print-int32-decimal:write-break/disp8
|
74/jump-if-= $print-int32-decimal:write-break/disp8
|
||||||
# if (curr >= max) abort
|
# if (curr >= max) abort
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 3/r32/ebx . . # compare ecx with ebx
|
||||||
73/jump-if-greater-or-equal-unsigned $print-int32-decimal:abort/disp8
|
73/jump-if-addr>= $print-int32-decimal:abort/disp8
|
||||||
$print-int32-decimal:write-char:
|
$print-int32-decimal:write-char:
|
||||||
# *curr = AL
|
# *curr = AL
|
||||||
88/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy AL to byte at *ecx
|
88/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy AL to byte at *ecx
|
||||||
|
@ -314,10 +314,10 @@ is-decimal-digit?: # c : byte -> eax : boolean
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 8/disp8 . # copy *(ebp+8) to ecx
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 1/r32/ecx 8/disp8 . # copy *(ebp+8) to ecx
|
||||||
# return false if c < '0'
|
# return false if c < '0'
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x30/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x30/imm32 # compare ecx
|
||||||
7c/jump-if-lesser $is-decimal-digit?:false/disp8
|
7c/jump-if-< $is-decimal-digit?:false/disp8
|
||||||
# return true if c <= '9'
|
# return true if c <= '9'
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x39/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x39/imm32 # compare ecx
|
||||||
7e/jump-if-lesser-or-equal $is-decimal-digit?:true/disp8
|
7e/jump-if-<= $is-decimal-digit?:true/disp8
|
||||||
# otherwise return false
|
# otherwise return false
|
||||||
$is-decimal-digit?:false:
|
$is-decimal-digit?:false:
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
|
|
|
@ -34,7 +34,7 @@ $next-word:check0:
|
||||||
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy *(esi+4) to eax
|
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy *(esi+4) to eax
|
||||||
# . if (eax < line->write) goto next check
|
# . if (eax < line->write) goto next check
|
||||||
3b/compare 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # compare eax with *esi
|
3b/compare 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # compare eax with *esi
|
||||||
7c/jump-if-lesser $next-word:check-for-comment/disp8
|
7c/jump-if-< $next-word:check-for-comment/disp8
|
||||||
# . return out
|
# . return out
|
||||||
c7 0/subop/copy 0/mod/direct 7/rm32/edi . . . . . 0/imm32 # copy to *edi
|
c7 0/subop/copy 0/mod/direct 7/rm32/edi . . . . . 0/imm32 # copy to *edi
|
||||||
c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi . . . . 4/disp8 0/imm32 # copy to *(edi+4)
|
c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi . . . . 4/disp8 0/imm32 # copy to *(edi+4)
|
||||||
|
@ -50,7 +50,7 @@ $next-word:check-for-comment:
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# . compare
|
# . compare
|
||||||
3d/compare-eax-and 0x23/imm32/pound
|
3d/compare-eax-and 0x23/imm32/pound
|
||||||
75/jump-if-not-equal $next-word:regular-word/disp8
|
75/jump-if-!= $next-word:regular-word/disp8
|
||||||
$next-word:comment:
|
$next-word:comment:
|
||||||
# . out->end = &line->data[line->write]
|
# . out->end = &line->data[line->write]
|
||||||
8b/copy 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # copy *esi to eax
|
8b/copy 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # copy *esi to eax
|
||||||
|
|
|
@ -62,7 +62,7 @@ $has-metadata?:loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) return false
|
# . if (eax != false) return false
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
75/jump-if-not-equal $has-metadata?:false/disp8
|
75/jump-if-!= $has-metadata?:false/disp8
|
||||||
# if (slice-equal?(twig, s)) return true
|
# if (slice-equal?(twig, s)) return true
|
||||||
# . eax = slice-equal?(twig, s)
|
# . eax = slice-equal?(twig, s)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -75,7 +75,7 @@ $has-metadata?:loop:
|
||||||
# . if (eax != false) return true
|
# . if (eax != false) return true
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
# eax already contains true
|
# eax already contains true
|
||||||
75/jump-if-not-equal $has-metadata?:end/disp8
|
75/jump-if-!= $has-metadata?:end/disp8
|
||||||
eb/jump $has-metadata?:loop/disp8
|
eb/jump $has-metadata?:loop/disp8
|
||||||
$has-metadata?:false:
|
$has-metadata?:false:
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
|
@ -289,29 +289,29 @@ is-valid-name?: # in : (addr slice) -> eax : boolean
|
||||||
$is-valid-name?:check0:
|
$is-valid-name?:check0:
|
||||||
# if (start >= in->end) return false
|
# if (start >= in->end) return false
|
||||||
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
||||||
73/jump-if-greater-or-equal-unsigned $is-valid-name?:false/disp8
|
73/jump-if-addr>= $is-valid-name?:false/disp8
|
||||||
$is-valid-name?:check1:
|
$is-valid-name?:check1:
|
||||||
# var len/eax : int = in->end - start
|
# var len/eax : int = in->end - start
|
||||||
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy *(esi+4) to eax
|
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy *(esi+4) to eax
|
||||||
29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # subtract ecx from eax
|
29/subtract 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # subtract ecx from eax
|
||||||
# if (eax == 2) return false
|
# if (eax == 2) return false
|
||||||
3d/compare-eax-and 2/imm32
|
3d/compare-eax-and 2/imm32
|
||||||
74/jump-if-equal $is-valid-name?:false/disp8
|
74/jump-if-= $is-valid-name?:false/disp8
|
||||||
$is-valid-name?:check2:
|
$is-valid-name?:check2:
|
||||||
# var c/eax : (addr byte) = *start
|
# var c/eax : (addr byte) = *start
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
# if (c == "-") return false
|
# if (c == "-") return false
|
||||||
3d/compare-eax-and 2d/imm32/-
|
3d/compare-eax-and 2d/imm32/-
|
||||||
74/jump-if-equal $is-valid-name?:false/disp8
|
74/jump-if-= $is-valid-name?:false/disp8
|
||||||
$is-valid-name?:check3a:
|
$is-valid-name?:check3a:
|
||||||
# if (c < "0") return true
|
# if (c < "0") return true
|
||||||
3d/compare-eax-with 30/imm32/0
|
3d/compare-eax-with 30/imm32/0
|
||||||
7c/jump-if-lesser $is-valid-name?:true/disp8
|
7c/jump-if-< $is-valid-name?:true/disp8
|
||||||
$is-valid-name?:check3b:
|
$is-valid-name?:check3b:
|
||||||
# if (c > "9") return true
|
# if (c > "9") return true
|
||||||
3d/compare-eax-with 39/imm32/9
|
3d/compare-eax-with 39/imm32/9
|
||||||
7f/jump-if-greater $is-valid-name?:true/disp8
|
7f/jump-if-> $is-valid-name?:true/disp8
|
||||||
$is-valid-name?:false:
|
$is-valid-name?:false:
|
||||||
# return false
|
# return false
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
|
@ -549,7 +549,7 @@ is-label?: # word : (addr slice) -> eax : boolean
|
||||||
# . return (eax == ':')
|
# . return (eax == ':')
|
||||||
3d/compare-eax-and 0x3a/imm32/colon
|
3d/compare-eax-and 0x3a/imm32/colon
|
||||||
b8/copy-to-eax 1/imm32/true
|
b8/copy-to-eax 1/imm32/true
|
||||||
74/jump-if-equal $is-label?:end/disp8
|
74/jump-if-= $is-label?:end/disp8
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
$is-label?:end:
|
$is-label?:end:
|
||||||
# . restore registers
|
# . restore registers
|
||||||
|
|
|
@ -25,7 +25,7 @@ emit-hex: # out : (addr buffered-file), n : int, width : int
|
||||||
$emit-hex:loop:
|
$emit-hex:loop:
|
||||||
# if (curr >= width) break
|
# if (curr >= width) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
7d/jump-if-greater-or-equal $emit-hex:end/disp8
|
7d/jump-if->= $emit-hex:end/disp8
|
||||||
# print-byte-buffered(out, ebx) # only BL used
|
# print-byte-buffered(out, ebx) # only BL used
|
||||||
# . . push args
|
# . . push args
|
||||||
53/push-ebx
|
53/push-ebx
|
||||||
|
|
|
@ -41,7 +41,7 @@ emit: # out : (addr buffered-file), word : (addr slice), width : int
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false)
|
# . if (eax != false)
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit:hex-int/disp8
|
74/jump-if-= $emit:hex-int/disp8
|
||||||
$emit:name:
|
$emit:name:
|
||||||
# . write-slice-buffered(out, word)
|
# . write-slice-buffered(out, word)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
|
|
@ -32,7 +32,7 @@ zero-out: # start : (addr byte), len : int
|
||||||
$zero-out:loop:
|
$zero-out:loop:
|
||||||
# if (i >= len) break
|
# if (i >= len) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
7d/jump-if-greater-or-equal $zero-out:end/disp8
|
7d/jump-if->= $zero-out:end/disp8
|
||||||
# *curr = 0
|
# *curr = 0
|
||||||
c6 0/subop/copy 0/mod/direct 6/rm32/esi . . . . . 0/imm8 # copy byte to *esi
|
c6 0/subop/copy 0/mod/direct 6/rm32/esi . . . . . 0/imm8 # copy byte to *esi
|
||||||
# ++curr
|
# ++curr
|
||||||
|
|
|
@ -51,7 +51,7 @@ get: # table : (addr stream {string_key, T}), key : string_key, row-size : int,
|
||||||
$get:search-loop:
|
$get:search-loop:
|
||||||
# if (curr >= max) abort
|
# if (curr >= max) abort
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $get:abort/disp8
|
73/jump-if-addr>= $get:abort/disp8
|
||||||
# if (string-equal?(key, *curr)) return curr+4
|
# if (string-equal?(key, *curr)) return curr+4
|
||||||
# . eax = string-equal?(key, *curr)
|
# . eax = string-equal?(key, *curr)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -63,7 +63,7 @@ $get:search-loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) return eax = curr+4
|
# . if (eax != false) return eax = curr+4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $get:mismatch/disp8
|
74/jump-if-= $get:mismatch/disp8
|
||||||
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
||||||
eb/jump $get:end/disp8
|
eb/jump $get:end/disp8
|
||||||
$get:mismatch:
|
$get:mismatch:
|
||||||
|
@ -225,7 +225,7 @@ get-slice: # table : (addr stream {string_key, T}), key : (addr slice), row-siz
|
||||||
$get-slice:search-loop:
|
$get-slice:search-loop:
|
||||||
# if (curr >= max) abort
|
# if (curr >= max) abort
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $get-slice:abort/disp8
|
73/jump-if-addr>= $get-slice:abort/disp8
|
||||||
# if (slice-equal?(key, *curr)) return curr+4
|
# if (slice-equal?(key, *curr)) return curr+4
|
||||||
# . eax = slice-equal?(key, *curr)
|
# . eax = slice-equal?(key, *curr)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -237,7 +237,7 @@ $get-slice:search-loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) return eax = curr+4
|
# . if (eax != false) return eax = curr+4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $get-slice:mismatch/disp8
|
74/jump-if-= $get-slice:mismatch/disp8
|
||||||
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
||||||
eb/jump $get-slice:end/disp8
|
eb/jump $get-slice:end/disp8
|
||||||
$get-slice:mismatch:
|
$get-slice:mismatch:
|
||||||
|
@ -433,7 +433,7 @@ get-or-insert: # table : (addr stream {string_key, T}), key : string_key, row-s
|
||||||
$get-or-insert:search-loop:
|
$get-or-insert:search-loop:
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $get-or-insert:not-found/disp8
|
73/jump-if-addr>= $get-or-insert:not-found/disp8
|
||||||
# if (string-equal?(key, *curr)) return curr+4
|
# if (string-equal?(key, *curr)) return curr+4
|
||||||
# . eax = string-equal?(key, *curr)
|
# . eax = string-equal?(key, *curr)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -445,7 +445,7 @@ $get-or-insert:search-loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) return eax = curr+4
|
# . if (eax != false) return eax = curr+4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $get-or-insert:mismatch/disp8
|
74/jump-if-= $get-or-insert:mismatch/disp8
|
||||||
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
||||||
eb/jump $get-or-insert:end/disp8
|
eb/jump $get-or-insert:end/disp8
|
||||||
$get-or-insert:mismatch:
|
$get-or-insert:mismatch:
|
||||||
|
@ -459,7 +459,7 @@ $get-or-insert:not-found:
|
||||||
# if (table->write >= table->length) abort
|
# if (table->write >= table->length) abort
|
||||||
8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx
|
8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx
|
||||||
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 . # compare ecx with *(esi+8)
|
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 . # compare ecx with *(esi+8)
|
||||||
73/jump-if-greater-or-equal-unsigned $get-or-insert:abort/disp8
|
73/jump-if-addr>= $get-or-insert:abort/disp8
|
||||||
# zero-out(max, row-size)
|
# zero-out(max, row-size)
|
||||||
# . . push args
|
# . . push args
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 . # push *(ebp+16)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 . # push *(ebp+16)
|
||||||
|
@ -684,7 +684,7 @@ leaky-get-or-insert-slice: # table : (addr stream {string_key, T}), key : (addr
|
||||||
$leaky-get-or-insert-slice:search-loop:
|
$leaky-get-or-insert-slice:search-loop:
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $leaky-get-or-insert-slice:not-found/disp8
|
73/jump-if-addr>= $leaky-get-or-insert-slice:not-found/disp8
|
||||||
# if (slice-equal?(key, *curr)) return curr+4
|
# if (slice-equal?(key, *curr)) return curr+4
|
||||||
# . eax = slice-equal?(key, *curr)
|
# . eax = slice-equal?(key, *curr)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -696,7 +696,7 @@ $leaky-get-or-insert-slice:search-loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) return eax = curr+4
|
# . if (eax != false) return eax = curr+4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $leaky-get-or-insert-slice:mismatch/disp8
|
74/jump-if-= $leaky-get-or-insert-slice:mismatch/disp8
|
||||||
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
||||||
eb/jump $leaky-get-or-insert-slice:end/disp8
|
eb/jump $leaky-get-or-insert-slice:end/disp8
|
||||||
$leaky-get-or-insert-slice:mismatch:
|
$leaky-get-or-insert-slice:mismatch:
|
||||||
|
@ -710,7 +710,7 @@ $leaky-get-or-insert-slice:not-found:
|
||||||
# if (table->write >= table->length) abort
|
# if (table->write >= table->length) abort
|
||||||
8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx
|
8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx
|
||||||
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 . # compare ecx with *(esi+8)
|
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 8/disp8 . # compare ecx with *(esi+8)
|
||||||
7d/jump-if-greater-or-equal $leaky-get-or-insert-slice:abort/disp8
|
7d/jump-if->= $leaky-get-or-insert-slice:abort/disp8
|
||||||
# zero-out(max, row-size)
|
# zero-out(max, row-size)
|
||||||
# . . push args
|
# . . push args
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 . # push *(ebp+16)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 . # push *(ebp+16)
|
||||||
|
@ -954,7 +954,7 @@ get-or-stop: # table : (addr stream {string_key, T}), key : string_key, row-siz
|
||||||
$get-or-stop:search-loop:
|
$get-or-stop:search-loop:
|
||||||
# if (curr >= max) stop(ed)
|
# if (curr >= max) stop(ed)
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $get-or-stop:stop/disp8
|
73/jump-if-addr>= $get-or-stop:stop/disp8
|
||||||
# if (string-equal?(key, *curr)) return curr+4
|
# if (string-equal?(key, *curr)) return curr+4
|
||||||
# . eax = string-equal?(key, *curr)
|
# . eax = string-equal?(key, *curr)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -966,7 +966,7 @@ $get-or-stop:search-loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) return eax = curr+4
|
# . if (eax != false) return eax = curr+4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $get-or-stop:mismatch/disp8
|
74/jump-if-= $get-or-stop:mismatch/disp8
|
||||||
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
||||||
eb/jump $get-or-stop:end/disp8
|
eb/jump $get-or-stop:end/disp8
|
||||||
$get-or-stop:mismatch:
|
$get-or-stop:mismatch:
|
||||||
|
@ -1170,7 +1170,7 @@ get-slice-or-stop: # table : (addr stream {string_key, _}), key : (addr slice),
|
||||||
$get-slice-or-stop:search-loop:
|
$get-slice-or-stop:search-loop:
|
||||||
# if (curr >= max) stop(ed)
|
# if (curr >= max) stop(ed)
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $get-slice-or-stop:stop/disp8
|
73/jump-if-addr>= $get-slice-or-stop:stop/disp8
|
||||||
# if (slice-equal?(key, *curr)) return curr+4
|
# if (slice-equal?(key, *curr)) return curr+4
|
||||||
# . eax = slice-equal?(key, *curr)
|
# . eax = slice-equal?(key, *curr)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1182,7 +1182,7 @@ $get-slice-or-stop:search-loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) return eax = curr+4
|
# . if (eax != false) return eax = curr+4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $get-slice-or-stop:mismatch/disp8
|
74/jump-if-= $get-slice-or-stop:mismatch/disp8
|
||||||
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
||||||
eb/jump $get-slice-or-stop:end/disp8
|
eb/jump $get-slice-or-stop:end/disp8
|
||||||
$get-slice-or-stop:mismatch:
|
$get-slice-or-stop:mismatch:
|
||||||
|
@ -1406,7 +1406,7 @@ maybe-get: # table : (addr stream {string_key, T}), key : string_key, row-size
|
||||||
$maybe-get:search-loop:
|
$maybe-get:search-loop:
|
||||||
# if (curr >= max) return null
|
# if (curr >= max) return null
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $maybe-get:null/disp8
|
73/jump-if-addr>= $maybe-get:null/disp8
|
||||||
# if (string-equal?(key, *curr)) return curr+4
|
# if (string-equal?(key, *curr)) return curr+4
|
||||||
# . eax = string-equal?(key, *curr)
|
# . eax = string-equal?(key, *curr)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1418,7 +1418,7 @@ $maybe-get:search-loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) return eax = curr+4
|
# . if (eax != false) return eax = curr+4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $maybe-get:mismatch/disp8
|
74/jump-if-= $maybe-get:mismatch/disp8
|
||||||
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
||||||
eb/jump $maybe-get:end/disp8
|
eb/jump $maybe-get:end/disp8
|
||||||
$maybe-get:mismatch:
|
$maybe-get:mismatch:
|
||||||
|
@ -1553,7 +1553,7 @@ maybe-get-slice: # table : (addr stream {string_key, T}), key : (addr slice), r
|
||||||
$maybe-get-slice:search-loop:
|
$maybe-get-slice:search-loop:
|
||||||
# if (curr >= max) return null
|
# if (curr >= max) return null
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $maybe-get-slice:null/disp8
|
73/jump-if-addr>= $maybe-get-slice:null/disp8
|
||||||
# if (slice-equal?(key, *curr)) return curr+4
|
# if (slice-equal?(key, *curr)) return curr+4
|
||||||
# . eax = slice-equal?(key, *curr)
|
# . eax = slice-equal?(key, *curr)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1565,7 +1565,7 @@ $maybe-get-slice:search-loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) return eax = curr+4
|
# . if (eax != false) return eax = curr+4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $maybe-get-slice:mismatch/disp8
|
74/jump-if-= $maybe-get-slice:mismatch/disp8
|
||||||
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
8d/copy-address 1/mod/*+disp8 1/rm32/ecx . . . 0/r32/eax 4/disp8 . # copy ecx+4 to eax
|
||||||
eb/jump $maybe-get-slice:end/disp8
|
eb/jump $maybe-get-slice:end/disp8
|
||||||
$maybe-get-slice:mismatch:
|
$maybe-get-slice:mismatch:
|
||||||
|
|
|
@ -35,10 +35,10 @@ slurp: # f : (addr buffered-file), s : (addr stream byte)
|
||||||
$slurp:loop:
|
$slurp:loop:
|
||||||
# if (s->write >= s->length) abort
|
# if (s->write >= s->length) abort
|
||||||
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 2/r32/edx 8/disp8 . # compare edx with *(edi+8)
|
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 2/r32/edx 8/disp8 . # compare edx with *(edi+8)
|
||||||
7d/jump-if-greater-or-equal $slurp:abort/disp8
|
7d/jump-if->= $slurp:abort/disp8
|
||||||
# if (f->read >= f->write) populate stream from file
|
# if (f->read >= f->write) populate stream from file
|
||||||
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
3b/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare ecx with *(esi+4)
|
||||||
7c/jump-if-lesser $slurp:from-stream/disp8
|
7c/jump-if-< $slurp:from-stream/disp8
|
||||||
# . clear-stream(stream = f+4)
|
# . clear-stream(stream = f+4)
|
||||||
# . . push args
|
# . . push args
|
||||||
8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy esi+4 to eax
|
8d/copy-address 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy esi+4 to eax
|
||||||
|
@ -61,7 +61,7 @@ $slurp:loop:
|
||||||
# since f->read was initially 0, eax is the same as f->write
|
# since f->read was initially 0, eax is the same as f->write
|
||||||
# . if (eax == 0) return true
|
# . if (eax == 0) return true
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $slurp:end/disp8
|
74/jump-if-= $slurp:end/disp8
|
||||||
$slurp:from-stream:
|
$slurp:from-stream:
|
||||||
# var c/eax : byte = f->data[f->read]
|
# var c/eax : byte = f->data[f->read]
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
|
|
|
@ -62,7 +62,7 @@ compute-width-of-slice: # s : (addr slice) -> eax : int
|
||||||
# . if (eax != false) return 4
|
# . if (eax != false) return 4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
b8/copy-to-eax 4/imm32 # ZF is set, so we can overwrite eax now
|
b8/copy-to-eax 4/imm32 # ZF is set, so we can overwrite eax now
|
||||||
75/jump-if-not-equal $compute-width-of-slice:end/disp8
|
75/jump-if-!= $compute-width-of-slice:end/disp8
|
||||||
# if (has-metadata?(word, "disp32")) return 4
|
# if (has-metadata?(word, "disp32")) return 4
|
||||||
# . eax = has-metadata?(word, "disp32")
|
# . eax = has-metadata?(word, "disp32")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -75,7 +75,7 @@ compute-width-of-slice: # s : (addr slice) -> eax : int
|
||||||
# . if (eax != false) return 4
|
# . if (eax != false) return 4
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
b8/copy-to-eax 4/imm32 # ZF is set, so we can overwrite eax now
|
b8/copy-to-eax 4/imm32 # ZF is set, so we can overwrite eax now
|
||||||
75/jump-if-not-equal $compute-width-of-slice:end/disp8
|
75/jump-if-!= $compute-width-of-slice:end/disp8
|
||||||
# if (has-metadata?(word, "imm16")) return 2
|
# if (has-metadata?(word, "imm16")) return 2
|
||||||
# . eax = has-metadata?(word, "imm16")
|
# . eax = has-metadata?(word, "imm16")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -88,7 +88,7 @@ compute-width-of-slice: # s : (addr slice) -> eax : int
|
||||||
# . if (eax != false) return 2
|
# . if (eax != false) return 2
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
b8/copy-to-eax 2/imm32 # ZF is set, so we can overwrite eax now
|
b8/copy-to-eax 2/imm32 # ZF is set, so we can overwrite eax now
|
||||||
75/jump-if-not-equal $compute-width-of-slice:end/disp8
|
75/jump-if-!= $compute-width-of-slice:end/disp8
|
||||||
# if (has-metadata?(word, "disp16")) return 2
|
# if (has-metadata?(word, "disp16")) return 2
|
||||||
# . eax = has-metadata?(word, "disp16")
|
# . eax = has-metadata?(word, "disp16")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -101,7 +101,7 @@ compute-width-of-slice: # s : (addr slice) -> eax : int
|
||||||
# . if (eax != false) return 2
|
# . if (eax != false) return 2
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
b8/copy-to-eax 2/imm32 # ZF is set, so we can overwrite eax now
|
b8/copy-to-eax 2/imm32 # ZF is set, so we can overwrite eax now
|
||||||
75/jump-if-not-equal $compute-width-of-slice:end/disp8
|
75/jump-if-!= $compute-width-of-slice:end/disp8
|
||||||
# otherwise return 1
|
# otherwise return 1
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
$compute-width-of-slice:end:
|
$compute-width-of-slice:end:
|
||||||
|
|
|
@ -27,7 +27,7 @@ emit-hex-array: # out : (addr buffered-file), arr : (addr array byte)
|
||||||
$emit-hex-array:loop:
|
$emit-hex-array:loop:
|
||||||
# if (curr >= width) break
|
# if (curr >= width) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $emit-hex-array:end/disp8
|
73/jump-if-addr>= $emit-hex-array:end/disp8
|
||||||
# emit-hex(out, c = *curr, width=1)
|
# emit-hex(out, c = *curr, width=1)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push 1/imm32/width
|
68/push 1/imm32/width
|
||||||
|
|
|
@ -32,7 +32,7 @@ $next-word-or-string:check0:
|
||||||
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy *(esi+4) to eax
|
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy *(esi+4) to eax
|
||||||
# . if (eax < line->write) goto next check
|
# . if (eax < line->write) goto next check
|
||||||
3b/compare 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # compare eax with *esi
|
3b/compare 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # compare eax with *esi
|
||||||
7c/jump-if-lesser $next-word-or-string:check-for-comment/disp8
|
7c/jump-if-< $next-word-or-string:check-for-comment/disp8
|
||||||
# . return out
|
# . return out
|
||||||
c7 0/subop/copy 0/mod/direct 7/rm32/edi . . . . . 0/imm32 # copy to *edi
|
c7 0/subop/copy 0/mod/direct 7/rm32/edi . . . . . 0/imm32 # copy to *edi
|
||||||
c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi . . . . 4/disp8 0/imm32 # copy to *(edi+4)
|
c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi . . . . 4/disp8 0/imm32 # copy to *(edi+4)
|
||||||
|
@ -48,7 +48,7 @@ $next-word-or-string:check-for-comment:
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# . compare
|
# . compare
|
||||||
3d/compare-eax-and 0x23/imm32/pound
|
3d/compare-eax-and 0x23/imm32/pound
|
||||||
75/jump-if-not-equal $next-word-or-string:check-for-string-literal/disp8
|
75/jump-if-!= $next-word-or-string:check-for-string-literal/disp8
|
||||||
$next-word-or-string:comment:
|
$next-word-or-string:comment:
|
||||||
# out->end = &line->data[line->write]
|
# out->end = &line->data[line->write]
|
||||||
8b/copy 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # copy *esi to eax
|
8b/copy 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # copy *esi to eax
|
||||||
|
@ -66,7 +66,7 @@ $next-word-or-string:check-for-string-literal:
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# . compare
|
# . compare
|
||||||
3d/compare-eax-and 0x22/imm32/dquote
|
3d/compare-eax-and 0x22/imm32/dquote
|
||||||
75/jump-if-not-equal $next-word-or-string:regular-word/disp8
|
75/jump-if-!= $next-word-or-string:regular-word/disp8
|
||||||
$next-word-or-string:string-literal:
|
$next-word-or-string:string-literal:
|
||||||
# skip-string(line)
|
# skip-string(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
|
|
@ -19,7 +19,7 @@ write-int: # out : (addr stream byte), n : int
|
||||||
8b/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # copy *edi to ecx
|
8b/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # copy *edi to ecx
|
||||||
# if (out->write >= out->length) abort
|
# if (out->write >= out->length) abort
|
||||||
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 8/disp8 . # compare ecx with *(edi+8)
|
3b/compare 1/mod/*+disp8 7/rm32/edi . . . 1/r32/ecx 8/disp8 . # compare ecx with *(edi+8)
|
||||||
7d/jump-if-greater-or-equal $write-int:abort/disp8
|
7d/jump-if->= $write-int:abort/disp8
|
||||||
$write-int:to-stream:
|
$write-int:to-stream:
|
||||||
# out->data[out->write] = n
|
# out->data[out->write] = n
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
||||||
|
|
|
@ -26,7 +26,7 @@ clear-stack: # s : (addr stack)
|
||||||
$clear-stack:loop:
|
$clear-stack:loop:
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $clear-stack:end/disp8
|
73/jump-if-addr>= $clear-stack:end/disp8
|
||||||
# *curr = 0
|
# *curr = 0
|
||||||
c6 0/subop/copy 0/mod/direct 0/rm32/eax . . . . . 0/imm8 # copy byte to *eax
|
c6 0/subop/copy 0/mod/direct 0/rm32/eax . . . . . 0/imm8 # copy byte to *eax
|
||||||
# ++curr
|
# ++curr
|
||||||
|
@ -121,7 +121,7 @@ push: # s : (addr stack), n : int
|
||||||
8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx
|
8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx
|
||||||
# if (s->top >= s->length) abort
|
# if (s->top >= s->length) abort
|
||||||
39/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare *(esi+4) and ecx
|
39/compare 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # compare *(esi+4) and ecx
|
||||||
7e/jump-if-lesser-or-equal $push:abort/disp8
|
7e/jump-if-<= $push:abort/disp8
|
||||||
# s->data[s->top] = n
|
# s->data[s->top] = n
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 0xc/disp8 . # copy *(ebp+12) to eax
|
||||||
89/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 8/disp8 . # copy eax to *(esi+ecx+8)
|
89/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/eax 8/disp8 . # copy eax to *(esi+ecx+8)
|
||||||
|
@ -238,7 +238,7 @@ pop: # s : (addr stack) -> n/eax : int
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi
|
||||||
# if (s->top <= 0) abort
|
# if (s->top <= 0) abort
|
||||||
81 7/subop/compare 0/mod/indirect 6/rm32/esi . . . . . 0/imm32 # compare *esi
|
81 7/subop/compare 0/mod/indirect 6/rm32/esi . . . . . 0/imm32 # compare *esi
|
||||||
7e/jump-if-lesser-or-equal $pop:abort/disp8
|
7e/jump-if-<= $pop:abort/disp8
|
||||||
# s->top -= 4
|
# s->top -= 4
|
||||||
81 5/subop/subtract 0/mod/direct 6/rm32/esi . . . . . 4/imm32 # subtract from *esi
|
81 5/subop/subtract 0/mod/direct 6/rm32/esi . . . . . 4/imm32 # subtract from *esi
|
||||||
# eax = s->data[s->top]
|
# eax = s->data[s->top]
|
||||||
|
@ -342,7 +342,7 @@ top: # s : (addr stack) -> n/eax : int
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 6/r32/esi 8/disp8 . # copy *(ebp+8) to esi
|
||||||
# if (s->top <= 0) abort
|
# if (s->top <= 0) abort
|
||||||
81 7/subop/compare 0/mod/indirect 6/rm32/esi . . . . . 0/imm32 # compare *esi
|
81 7/subop/compare 0/mod/indirect 6/rm32/esi . . . . . 0/imm32 # compare *esi
|
||||||
7e/jump-if-lesser-or-equal $top:abort/disp8
|
7e/jump-if-<= $top:abort/disp8
|
||||||
# n = s->data[s->top - 4]
|
# n = s->data[s->top - 4]
|
||||||
8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx
|
8b/copy 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # copy *esi to ecx
|
||||||
81 5/subop/subtract 3/mod/direct 1/rm32/ecx . . . . . 4/imm32 # subtract from ecx
|
81 5/subop/subtract 3/mod/direct 1/rm32/ecx . . . . . 4/imm32 # subtract from ecx
|
||||||
|
|
|
@ -42,7 +42,7 @@ array-equal?: # a : (addr array int), b : (addr array int) -> eax : boolean
|
||||||
$array-equal?:lengths:
|
$array-equal?:lengths:
|
||||||
# if (lena != b->length) return false
|
# if (lena != b->length) return false
|
||||||
39/compare *edi 2/r32/edx
|
39/compare *edi 2/r32/edx
|
||||||
75/jump-if-not-equal $array-equal?:false/disp8
|
75/jump-if-!= $array-equal?:false/disp8
|
||||||
# var curra/esi : (addr byte) = a->data
|
# var curra/esi : (addr byte) = a->data
|
||||||
81 0/subop/add %esi 4/imm32
|
81 0/subop/add %esi 4/imm32
|
||||||
# var currb/edi : (addr byte) = b->data
|
# var currb/edi : (addr byte) = b->data
|
||||||
|
@ -54,14 +54,14 @@ $array-equal?:lengths:
|
||||||
$array-equal?:loop:
|
$array-equal?:loop:
|
||||||
# if (i >= lena) return true
|
# if (i >= lena) return true
|
||||||
39/compare %ecx 2/r32/edx
|
39/compare %ecx 2/r32/edx
|
||||||
7d/jump-if-greater-or-equal $array-equal?:true/disp8
|
7d/jump-if->= $array-equal?:true/disp8
|
||||||
# var vala/eax : int = *curra
|
# var vala/eax : int = *curra
|
||||||
8b/-> *esi 0/r32/eax
|
8b/-> *esi 0/r32/eax
|
||||||
# var valb/ebx : int = *currb
|
# var valb/ebx : int = *currb
|
||||||
8b/-> *edi 3/r32/ebx
|
8b/-> *edi 3/r32/ebx
|
||||||
# if (vala != valb) return false
|
# if (vala != valb) return false
|
||||||
39/compare %eax 3/r32/ebx
|
39/compare %eax 3/r32/ebx
|
||||||
75/jump-if-not-equal $array-equal?:false/disp8
|
75/jump-if-!= $array-equal?:false/disp8
|
||||||
# i += 4
|
# i += 4
|
||||||
81 0/subop/add %ecx 4/imm32
|
81 0/subop/add %ecx 4/imm32
|
||||||
# currs += 4
|
# currs += 4
|
||||||
|
@ -275,7 +275,7 @@ parse-array-of-ints: # ad : (addr allocation-descriptor), s : (addr string) ->
|
||||||
$parse-array-of-ints:loop1:
|
$parse-array-of-ints:loop1:
|
||||||
# if (curr >= end) break
|
# if (curr >= end) break
|
||||||
39/compare %ecx 2/r32/edx
|
39/compare %ecx 2/r32/edx
|
||||||
73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:break1/disp8
|
73/jump-if-addr>= $parse-array-of-ints:break1/disp8
|
||||||
# curr = skip-chars-matching-in-slice(curr, end, ' ')
|
# curr = skip-chars-matching-in-slice(curr, end, ' ')
|
||||||
# . eax = skip-chars-matching-in-slice(curr, end, ' ')
|
# . eax = skip-chars-matching-in-slice(curr, end, ' ')
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -290,7 +290,7 @@ $parse-array-of-ints:loop1:
|
||||||
89/<- %ecx 0/r32/eax
|
89/<- %ecx 0/r32/eax
|
||||||
# if (curr >= end) break
|
# if (curr >= end) break
|
||||||
39/compare %ecx 2/r32/edx
|
39/compare %ecx 2/r32/edx
|
||||||
73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:break1/disp8
|
73/jump-if-addr>= $parse-array-of-ints:break1/disp8
|
||||||
# curr = skip-chars-not-matching-in-slice(curr, end, ' ')
|
# curr = skip-chars-not-matching-in-slice(curr, end, ' ')
|
||||||
# . eax = skip-chars-not-matching-in-slice(curr, end, ' ')
|
# . eax = skip-chars-not-matching-in-slice(curr, end, ' ')
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -333,7 +333,7 @@ $parse-array-of-ints:pass2:
|
||||||
$parse-array-of-ints:loop2:
|
$parse-array-of-ints:loop2:
|
||||||
# if (slice->start >= end) break
|
# if (slice->start >= end) break
|
||||||
39/compare *ecx 2/r32/edx
|
39/compare *ecx 2/r32/edx
|
||||||
73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:end/disp8
|
73/jump-if-addr>= $parse-array-of-ints:end/disp8
|
||||||
# slice->start = skip-chars-matching-in-slice(slice->start, end, ' ')
|
# slice->start = skip-chars-matching-in-slice(slice->start, end, ' ')
|
||||||
# . eax = skip-chars-matching-in-slice(slice->start, end, ' ')
|
# . eax = skip-chars-matching-in-slice(slice->start, end, ' ')
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -348,7 +348,7 @@ $parse-array-of-ints:loop2:
|
||||||
89/<- *ecx 0/r32/eax
|
89/<- *ecx 0/r32/eax
|
||||||
# if (slice->start >= end) break
|
# if (slice->start >= end) break
|
||||||
39/compare *ecx 2/r32/edx
|
39/compare *ecx 2/r32/edx
|
||||||
73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:end/disp8
|
73/jump-if-addr>= $parse-array-of-ints:end/disp8
|
||||||
# slice->end = skip-chars-not-matching-in-slice(slice->start, end, ' ')
|
# slice->end = skip-chars-not-matching-in-slice(slice->start, end, ' ')
|
||||||
# . eax = skip-chars-not-matching-in-slice(curr, end, ' ')
|
# . eax = skip-chars-not-matching-in-slice(curr, end, ' ')
|
||||||
# . . push args
|
# . . push args
|
||||||
|
|
|
@ -40,7 +40,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto interactive
|
# if (argc <= 1) goto interactive
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $subx-assort-main:interactive/disp8
|
7e/jump-if-<= $subx-assort-main:interactive/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -52,7 +52,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto interactive
|
# . if (eax == false) goto interactive
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-assort-main:interactive/disp8
|
74/jump-if-= $subx-assort-main:interactive/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -525,7 +525,7 @@ $read-segments:loop:
|
||||||
$read-segments:check0:
|
$read-segments:check0:
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
||||||
0f 84/jump-if-equal $read-segments:break/disp32
|
0f 84/jump-if-= $read-segments:break/disp32
|
||||||
#? # dump line {{{
|
#? # dump line {{{
|
||||||
#? # . write(2/stderr, "LL: ")
|
#? # . write(2/stderr, "LL: ")
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
|
@ -587,7 +587,7 @@ $read-segments:check1:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) continue
|
# . if (eax != false) continue
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $read-segments:loop/disp32
|
0f 85/jump-if-!= $read-segments:loop/disp32
|
||||||
$read-segments:check-for-comment:
|
$read-segments:check-for-comment:
|
||||||
#? # print("check for comment\n") {{{
|
#? # print("check for comment\n") {{{
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
|
@ -606,7 +606,7 @@ $read-segments:check-for-comment:
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
||||||
# . if (c == '#') continue
|
# . if (c == '#') continue
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal $read-segments:loop/disp32
|
0f 84/jump-if-= $read-segments:loop/disp32
|
||||||
$read-segments:check-for-segment-header:
|
$read-segments:check-for-segment-header:
|
||||||
#? # print("check for segment header\n") {{{
|
#? # print("check for segment header\n") {{{
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
|
@ -668,7 +668,7 @@ $read-segments:check-for-segment-header:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto check3
|
# . if (eax == false) goto check3
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 84/jump-if-equal $read-segments:regular-line/disp32
|
0f 84/jump-if-= $read-segments:regular-line/disp32
|
||||||
# segment-name = next-word-or-string(line)
|
# segment-name = next-word-or-string(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
52/push-edx
|
52/push-edx
|
||||||
|
@ -730,7 +730,7 @@ $read-segments:check-for-segment-header:
|
||||||
8b/copy 0/mod/indirect 0/rm32/eax . . . 3/r32/ebx . . # copy *eax to ebx
|
8b/copy 0/mod/indirect 0/rm32/eax . . . 3/r32/ebx . . # copy *eax to ebx
|
||||||
# if (curr-segment != 0) continue
|
# if (curr-segment != 0) continue
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32 # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32 # compare ebx
|
||||||
0f 85/jump-if-not-equal $read-segments:loop/disp32
|
0f 85/jump-if-!= $read-segments:loop/disp32
|
||||||
# curr-segment = new-stream(Heap, Segment-size, 1)
|
# curr-segment = new-stream(Heap, Segment-size, 1)
|
||||||
# . save segment-slot
|
# . save segment-slot
|
||||||
50/push-eax
|
50/push-eax
|
||||||
|
@ -871,7 +871,7 @@ write-segments: # out : (addr buffered-file), table : (addr stream {string_key,
|
||||||
$write-segments:loop:
|
$write-segments:loop:
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 6/rm32/esi . . . 2/r32/edx . . # compare esi with edx
|
39/compare 3/mod/direct 6/rm32/esi . . . 2/r32/edx . . # compare esi with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $write-segments:break/disp8
|
73/jump-if-addr>= $write-segments:break/disp8
|
||||||
# var stream/eax : (addr stream byte) = table[i].stream
|
# var stream/eax : (addr stream byte) = table[i].stream
|
||||||
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy *(esi+4) to eax
|
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 0/r32/eax 4/disp8 . # copy *(esi+4) to eax
|
||||||
# write-stream-data(out, stream)
|
# write-stream-data(out, stream)
|
||||||
|
|
|
@ -57,11 +57,11 @@ Entry: # run tests if necessary, a REPL if not
|
||||||
(new-segment *Heap-size Heap)
|
(new-segment *Heap-size Heap)
|
||||||
# if (argc <= 1) goto interactive
|
# if (argc <= 1) goto interactive
|
||||||
81 7/subop/compare *ebp 1/imm32
|
81 7/subop/compare *ebp 1/imm32
|
||||||
7e/jump-if-lesser-or-equal $subx-braces-main:interactive/disp8
|
7e/jump-if-<= $subx-braces-main:interactive/disp8
|
||||||
# if (argv[1] != "test")) goto interactive
|
# if (argv[1] != "test")) goto interactive
|
||||||
(kernel-string-equal? *(ebp+8) "test") # => eax
|
(kernel-string-equal? *(ebp+8) "test") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $subx-braces-main:interactive/disp8
|
74/jump-if-= $subx-braces-main:interactive/disp8
|
||||||
#
|
#
|
||||||
(run-tests)
|
(run-tests)
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -146,7 +146,7 @@ $subx-braces:line-loop:
|
||||||
$subx-braces:check0:
|
$subx-braces:check0:
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare *ecx 0/imm32
|
81 7/subop/compare *ecx 0/imm32
|
||||||
0f 84/jump-if-equal $subx-braces:break/disp32
|
0f 84/jump-if-= $subx-braces:break/disp32
|
||||||
(skip-chars-matching-whitespace %ecx)
|
(skip-chars-matching-whitespace %ecx)
|
||||||
$subx-braces:check-for-curly-open:
|
$subx-braces:check-for-curly-open:
|
||||||
# if (line->data[line->read] != '{') goto next check
|
# if (line->data[line->read] != '{') goto next check
|
||||||
|
@ -156,7 +156,7 @@ $subx-braces:check-for-curly-open:
|
||||||
81 4/subop/and %eax 0xff/imm32
|
81 4/subop/and %eax 0xff/imm32
|
||||||
# . if (eax != '{') continue
|
# . if (eax != '{') continue
|
||||||
3d/compare-eax-and 0x7b/imm32/open-curly
|
3d/compare-eax-and 0x7b/imm32/open-curly
|
||||||
0f 85/jump-if-not-equal $subx-braces:check-for-curly-closed/disp32
|
0f 85/jump-if-!= $subx-braces:check-for-curly-closed/disp32
|
||||||
$subx-braces:emit-curly-open:
|
$subx-braces:emit-curly-open:
|
||||||
# print(out, "_loop" next-label-id ":")
|
# print(out, "_loop" next-label-id ":")
|
||||||
(write-buffered *(ebp+0xc) "_loop")
|
(write-buffered *(ebp+0xc) "_loop")
|
||||||
|
@ -171,7 +171,7 @@ $subx-braces:emit-curly-open:
|
||||||
$subx-braces:check-for-curly-closed:
|
$subx-braces:check-for-curly-closed:
|
||||||
# if (line->data[line->read] != '}') goto next check
|
# if (line->data[line->read] != '}') goto next check
|
||||||
3d/compare-eax-and 0x7d/imm32/close-curly
|
3d/compare-eax-and 0x7d/imm32/close-curly
|
||||||
0f 85/jump-if-equal $subx-braces:word-loop/disp32
|
0f 85/jump-if-= $subx-braces:word-loop/disp32
|
||||||
$subx-braces:emit-curly-closed:
|
$subx-braces:emit-curly-closed:
|
||||||
# eax = pop(label-stack)
|
# eax = pop(label-stack)
|
||||||
(pop %edx)
|
(pop %edx)
|
||||||
|
@ -187,7 +187,7 @@ $subx-braces:check1:
|
||||||
# if (slice-empty?(word-slice)) break
|
# if (slice-empty?(word-slice)) break
|
||||||
(slice-empty? %edi)
|
(slice-empty? %edi)
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $subx-braces:next-line/disp32
|
0f 85/jump-if-!= $subx-braces:next-line/disp32
|
||||||
$subx-braces:check-for-comment:
|
$subx-braces:check-for-comment:
|
||||||
# if (slice-starts-with?(word-slice, "#")) continue
|
# if (slice-starts-with?(word-slice, "#")) continue
|
||||||
# . eax = *word-slice->start
|
# . eax = *word-slice->start
|
||||||
|
@ -196,14 +196,14 @@ $subx-braces:check-for-comment:
|
||||||
81 4/subop/and %eax 0xff/imm32
|
81 4/subop/and %eax 0xff/imm32
|
||||||
# . if (eax == '#') continue
|
# . if (eax == '#') continue
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
74/jump-if-equal $subx-braces:word-loop/disp8
|
74/jump-if-= $subx-braces:word-loop/disp8
|
||||||
$subx-braces:check-for-break:
|
$subx-braces:check-for-break:
|
||||||
# if (!slice-starts-with?(word-slice, "break/")) goto next check
|
# if (!slice-starts-with?(word-slice, "break/")) goto next check
|
||||||
# . eax = slice-starts-with?(word-slice, "break/")
|
# . eax = slice-starts-with?(word-slice, "break/")
|
||||||
(slice-starts-with? %edi "break/")
|
(slice-starts-with? %edi "break/")
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-braces:check-for-loop/disp8
|
74/jump-if-= $subx-braces:check-for-loop/disp8
|
||||||
$subx-braces:emit-break:
|
$subx-braces:emit-break:
|
||||||
(top %edx)
|
(top %edx)
|
||||||
# print(out, "_break" eax)
|
# print(out, "_break" eax)
|
||||||
|
@ -219,7 +219,7 @@ $subx-braces:check-for-loop:
|
||||||
(slice-starts-with? %edi "loop/")
|
(slice-starts-with? %edi "loop/")
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-braces:emit-word-slice/disp8
|
74/jump-if-= $subx-braces:emit-word-slice/disp8
|
||||||
$subx-braces:emit-loop:
|
$subx-braces:emit-loop:
|
||||||
(top %edx)
|
(top %edx)
|
||||||
# print(out, "_loop" eax)
|
# print(out, "_loop" eax)
|
||||||
|
|
|
@ -41,7 +41,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto run-main
|
# if (argc <= 1) goto run-main
|
||||||
81 7/subop/compare *ebp 1/imm32
|
81 7/subop/compare *ebp 1/imm32
|
||||||
7e/jump-if-lesser-or-equal $subx-calls-main:interactive/disp8
|
7e/jump-if-<= $subx-calls-main:interactive/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -53,7 +53,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
81 0/subop/add %esp 8/imm32
|
81 0/subop/add %esp 8/imm32
|
||||||
# . if (eax == false) goto run-main
|
# . if (eax == false) goto run-main
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-calls-main:interactive/disp8
|
74/jump-if-= $subx-calls-main:interactive/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -136,7 +136,7 @@ $subx-calls:loop:
|
||||||
$subx-calls:check0:
|
$subx-calls:check0:
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare *esi 0/imm32
|
81 7/subop/compare *esi 0/imm32
|
||||||
0f 84/jump-if-equal $subx-calls:break/disp32
|
0f 84/jump-if-= $subx-calls:break/disp32
|
||||||
# skip-chars-matching-whitespace(line)
|
# skip-chars-matching-whitespace(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
56/push-esi
|
56/push-esi
|
||||||
|
@ -152,7 +152,7 @@ $subx-calls:check0:
|
||||||
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
# . if (eax == '(') goto convert-call
|
# . if (eax == '(') goto convert-call
|
||||||
3d/compare-eax-and 0x28/imm32/open-paren
|
3d/compare-eax-and 0x28/imm32/open-paren
|
||||||
74/jump-if-equal $subx-calls:convert-call/disp8
|
74/jump-if-= $subx-calls:convert-call/disp8
|
||||||
$subx-calls:pass-through:
|
$subx-calls:pass-through:
|
||||||
# write-stream-data(out, line)
|
# write-stream-data(out, line)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -270,7 +270,7 @@ $parse-line:check1:
|
||||||
81 0/subop/add %esp 4/imm32
|
81 0/subop/add %esp 4/imm32
|
||||||
# . if (eax != false) break
|
# . if (eax != false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $parse-line:end/disp32
|
0f 85/jump-if-!= $parse-line:end/disp32
|
||||||
#? # dump word-slice {{{
|
#? # dump word-slice {{{
|
||||||
#? # . write(2/stderr, "w: ")
|
#? # . write(2/stderr, "w: ")
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
|
@ -380,7 +380,7 @@ emit-call: # out : (addr buffered-file), words : (addr stream slice)
|
||||||
# . ecx = words->write - 8
|
# . ecx = words->write - 8
|
||||||
8b/-> *esi 1/r32/ecx
|
8b/-> *esi 1/r32/ecx
|
||||||
81 5/subop/subtract %ecx 8/imm32
|
81 5/subop/subtract %ecx 8/imm32
|
||||||
0f 8c/jump-if-lesser $emit-call:error1/disp32
|
0f 8c/jump-if-< $emit-call:error1/disp32
|
||||||
# var curr/ecx : (addr slice) = &words->data[words->write-8]
|
# var curr/ecx : (addr slice) = &words->data[words->write-8]
|
||||||
8d/copy-address *(esi+ecx+0xc) 1/r32/ecx
|
8d/copy-address *(esi+ecx+0xc) 1/r32/ecx
|
||||||
# var min/edx : (addr byte) = words->data
|
# var min/edx : (addr byte) = words->data
|
||||||
|
@ -389,7 +389,7 @@ emit-call: # out : (addr buffered-file), words : (addr stream slice)
|
||||||
$emit-call:push-loop:
|
$emit-call:push-loop:
|
||||||
# if (curr <= min) break
|
# if (curr <= min) break
|
||||||
39/compare %ecx 2/r32/edx
|
39/compare %ecx 2/r32/edx
|
||||||
0f 8e/jump-if-lesser-or-equal $emit-call:call-instruction/disp32
|
0f 8e/jump-if-<= $emit-call:call-instruction/disp32
|
||||||
# if (*curr->start in '%' '*') goto push-rm32
|
# if (*curr->start in '%' '*') goto push-rm32
|
||||||
# . var start/eax : (addr byte) = curr->start
|
# . var start/eax : (addr byte) = curr->start
|
||||||
8b/-> *ecx 0/r32/eax
|
8b/-> *ecx 0/r32/eax
|
||||||
|
@ -398,10 +398,10 @@ $emit-call:push-loop:
|
||||||
81 4/subop/and %eax 0xff/imm32
|
81 4/subop/and %eax 0xff/imm32
|
||||||
# . if (c == '%') goto push-rm32
|
# . if (c == '%') goto push-rm32
|
||||||
3d/compare-eax-and 0x25/imm32/percent
|
3d/compare-eax-and 0x25/imm32/percent
|
||||||
74/jump-if-equal $emit-call:push-rm32/disp8
|
74/jump-if-= $emit-call:push-rm32/disp8
|
||||||
# . if (c == '*') goto push-rm32
|
# . if (c == '*') goto push-rm32
|
||||||
3d/compare-eax-and 0x2a/imm32/asterisk
|
3d/compare-eax-and 0x2a/imm32/asterisk
|
||||||
74/jump-if-equal $emit-call:push-rm32/disp8
|
74/jump-if-= $emit-call:push-rm32/disp8
|
||||||
$emit-call:push-imm32:
|
$emit-call:push-imm32:
|
||||||
# write-buffered(out, "68/push ")
|
# write-buffered(out, "68/push ")
|
||||||
68/push "68/push "/imm32
|
68/push "68/push "/imm32
|
||||||
|
@ -824,7 +824,7 @@ $next-word-string-or-expression-without-metadata:check0:
|
||||||
8b/-> *(esi+4) 1/r32/ecx
|
8b/-> *(esi+4) 1/r32/ecx
|
||||||
# . if (ecx >= line->write) return out = {0, 0}
|
# . if (ecx >= line->write) return out = {0, 0}
|
||||||
3b/compare 1/r32/ecx *esi
|
3b/compare 1/r32/ecx *esi
|
||||||
0f 8d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:return-eol/disp32
|
0f 8d/jump-if->= $next-word-string-or-expression-without-metadata:return-eol/disp32
|
||||||
$next-word-string-or-expression-without-metadata:check-for-comment:
|
$next-word-string-or-expression-without-metadata:check-for-comment:
|
||||||
# out->start = &line->data[line->read]
|
# out->start = &line->data[line->read]
|
||||||
8d/copy-address *(esi+ecx+0xc) 0/r32/eax
|
8d/copy-address *(esi+ecx+0xc) 0/r32/eax
|
||||||
|
@ -835,7 +835,7 @@ $next-word-string-or-expression-without-metadata:check-for-comment:
|
||||||
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
# . if (eax != '#') goto next check
|
# . if (eax != '#') goto next check
|
||||||
3d/compare-eax-and 0x23/imm32/pound
|
3d/compare-eax-and 0x23/imm32/pound
|
||||||
75/jump-if-not-equal $next-word-string-or-expression-without-metadata:check-for-string-literal/disp8
|
75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-string-literal/disp8
|
||||||
$next-word-string-or-expression-without-metadata:comment:
|
$next-word-string-or-expression-without-metadata:comment:
|
||||||
# out->end = &line->data[line->write]
|
# out->end = &line->data[line->write]
|
||||||
8b/-> *esi 0/r32/eax
|
8b/-> *esi 0/r32/eax
|
||||||
|
@ -849,7 +849,7 @@ $next-word-string-or-expression-without-metadata:comment:
|
||||||
$next-word-string-or-expression-without-metadata:check-for-string-literal:
|
$next-word-string-or-expression-without-metadata:check-for-string-literal:
|
||||||
# if (line->data[line->read] != '"') goto next check
|
# if (line->data[line->read] != '"') goto next check
|
||||||
3d/compare-eax-and 0x22/imm32/dquote
|
3d/compare-eax-and 0x22/imm32/dquote
|
||||||
75/jump-if-not-equal $next-word-string-or-expression-without-metadata:check-for-expression/disp8
|
75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-expression/disp8
|
||||||
$next-word-string-or-expression-without-metadata:string-literal:
|
$next-word-string-or-expression-without-metadata:string-literal:
|
||||||
# skip-string(line)
|
# skip-string(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -867,14 +867,14 @@ $next-word-string-or-expression-without-metadata:string-literal:
|
||||||
$next-word-string-or-expression-without-metadata:check-for-expression:
|
$next-word-string-or-expression-without-metadata:check-for-expression:
|
||||||
# if (line->data[line->read] != '*') goto next check
|
# if (line->data[line->read] != '*') goto next check
|
||||||
3d/compare-eax-and 0x2a/imm32/asterisk
|
3d/compare-eax-and 0x2a/imm32/asterisk
|
||||||
75/jump-if-not-equal $next-word-string-or-expression-without-metadata:check-for-end-of-call/disp8
|
75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-end-of-call/disp8
|
||||||
# if (line->data[line->read + 1] == ' ') goto error1
|
# if (line->data[line->read + 1] == ' ') goto error1
|
||||||
8a/copy-byte *(esi+ecx+0xd) 0/r32/AL
|
8a/copy-byte *(esi+ecx+0xd) 0/r32/AL
|
||||||
3d/compare-eax-and 0x20/imm32/space
|
3d/compare-eax-and 0x20/imm32/space
|
||||||
0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:error1/disp32
|
0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error1/disp32
|
||||||
# if (line->data[line->read + 1] != '(') goto regular-word
|
# if (line->data[line->read + 1] != '(') goto regular-word
|
||||||
3d/compare-eax-and 0x28/imm32/open-paren
|
3d/compare-eax-and 0x28/imm32/open-paren
|
||||||
0f 85/jump-if-not-equal $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp32
|
0f 85/jump-if-!= $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp32
|
||||||
$next-word-string-or-expression-without-metadata:paren:
|
$next-word-string-or-expression-without-metadata:paren:
|
||||||
# skip-until-close-paren(line)
|
# skip-until-close-paren(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -889,7 +889,7 @@ $next-word-string-or-expression-without-metadata:paren:
|
||||||
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
# . if (eax != ')') goto error2
|
# . if (eax != ')') goto error2
|
||||||
3d/compare-eax-and 0x29/imm32/close-paren
|
3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
0f 85/jump-if-not-equal $next-word-string-or-expression-without-metadata:error2/disp32
|
0f 85/jump-if-!= $next-word-string-or-expression-without-metadata:error2/disp32
|
||||||
# ++line->read to skip ')'
|
# ++line->read to skip ')'
|
||||||
ff 0/subop/increment *(esi+4)
|
ff 0/subop/increment *(esi+4)
|
||||||
# out->end = &line->data[line->read]
|
# out->end = &line->data[line->read]
|
||||||
|
@ -901,7 +901,7 @@ $next-word-string-or-expression-without-metadata:paren:
|
||||||
$next-word-string-or-expression-without-metadata:check-for-end-of-call:
|
$next-word-string-or-expression-without-metadata:check-for-end-of-call:
|
||||||
# if (line->data[line->read] != ')') goto next check
|
# if (line->data[line->read] != ')') goto next check
|
||||||
3d/compare-eax-and 0x29/imm32/close-paren
|
3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
75/jump-if-not-equal $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp8
|
75/jump-if-!= $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp8
|
||||||
# ++line->read to skip ')'
|
# ++line->read to skip ')'
|
||||||
ff 0/subop/increment *(esi+4)
|
ff 0/subop/increment *(esi+4)
|
||||||
# - error checking: make sure there's nothing else of importance on the line
|
# - error checking: make sure there's nothing else of importance on the line
|
||||||
|
@ -910,13 +910,13 @@ $next-word-string-or-expression-without-metadata:check-for-end-of-call:
|
||||||
8b/-> *(esi+4) 1/r32/ecx
|
8b/-> *(esi+4) 1/r32/ecx
|
||||||
# . if (ecx >= line->write) return {0, 0}
|
# . if (ecx >= line->write) return {0, 0}
|
||||||
3b/compare 1/r32/ecx *esi
|
3b/compare 1/r32/ecx *esi
|
||||||
0f 8d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:return-eol/disp32
|
0f 8d/jump-if->= $next-word-string-or-expression-without-metadata:return-eol/disp32
|
||||||
# if (line->data[line->read] == '/') goto error3
|
# if (line->data[line->read] == '/') goto error3
|
||||||
# . eax = line->data[line->read]
|
# . eax = line->data[line->read]
|
||||||
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
# . if (eax == '/') goto error3
|
# . if (eax == '/') goto error3
|
||||||
3d/compare-eax-and 0x2f/imm32/slash
|
3d/compare-eax-and 0x2f/imm32/slash
|
||||||
0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:error3/disp32
|
0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error3/disp32
|
||||||
# skip-chars-matching-whitespace(line)
|
# skip-chars-matching-whitespace(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
56/push-esi
|
56/push-esi
|
||||||
|
@ -929,14 +929,14 @@ $next-word-string-or-expression-without-metadata:check-for-end-of-call:
|
||||||
8b/-> *(esi+4) 1/r32/ecx
|
8b/-> *(esi+4) 1/r32/ecx
|
||||||
# . if (ecx >= line->write) return {0, 0}
|
# . if (ecx >= line->write) return {0, 0}
|
||||||
3b/compare 1/r32/ecx *esi
|
3b/compare 1/r32/ecx *esi
|
||||||
0f 8d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:return-eol/disp32
|
0f 8d/jump-if->= $next-word-string-or-expression-without-metadata:return-eol/disp32
|
||||||
# if (line->data[line->read] == '#') return out = {0, 0}
|
# if (line->data[line->read] == '#') return out = {0, 0}
|
||||||
# . eax = line->data[line->read]
|
# . eax = line->data[line->read]
|
||||||
8b/-> *(esi+4) 1/r32/ecx
|
8b/-> *(esi+4) 1/r32/ecx
|
||||||
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
# . if (eax == '#') return out = {0, 0}
|
# . if (eax == '#') return out = {0, 0}
|
||||||
3d/compare-eax-and 0x23/imm32/pound
|
3d/compare-eax-and 0x23/imm32/pound
|
||||||
74/jump-if-equal $next-word-string-or-expression-without-metadata:return-eol/disp8
|
74/jump-if-= $next-word-string-or-expression-without-metadata:return-eol/disp8
|
||||||
# otherwise goto error4
|
# otherwise goto error4
|
||||||
e9/jump $next-word-string-or-expression-without-metadata:error4/disp32
|
e9/jump $next-word-string-or-expression-without-metadata:error4/disp32
|
||||||
$next-word-string-or-expression-without-metadata:regular-word-without-metadata:
|
$next-word-string-or-expression-without-metadata:regular-word-without-metadata:
|
||||||
|
@ -945,20 +945,20 @@ $next-word-string-or-expression-without-metadata:regular-word-without-metadata:
|
||||||
8b/-> *(esi+4) 1/r32/ecx
|
8b/-> *(esi+4) 1/r32/ecx
|
||||||
# . if (ecx >= line->write) break
|
# . if (ecx >= line->write) break
|
||||||
3b/compare *esi 1/r32/ecx
|
3b/compare *esi 1/r32/ecx
|
||||||
7d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:regular-word-break/disp8
|
7d/jump-if->= $next-word-string-or-expression-without-metadata:regular-word-break/disp8
|
||||||
# if (line->data[line->read] == ' ') break
|
# if (line->data[line->read] == ' ') break
|
||||||
# . eax = line->data[line->read]
|
# . eax = line->data[line->read]
|
||||||
8b/-> *(esi+4) 1/r32/ecx
|
8b/-> *(esi+4) 1/r32/ecx
|
||||||
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
# . if (eax == ' ') break
|
# . if (eax == ' ') break
|
||||||
3d/compare-eax-and 0x20/imm32/space
|
3d/compare-eax-and 0x20/imm32/space
|
||||||
74/jump-if-equal $next-word-string-or-expression-without-metadata:regular-word-break/disp8
|
74/jump-if-= $next-word-string-or-expression-without-metadata:regular-word-break/disp8
|
||||||
# if (line->data[line->read] == ')') break
|
# if (line->data[line->read] == ')') break
|
||||||
3d/compare-eax-and 0x29/imm32/close-paren
|
3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:regular-word-break/disp32
|
0f 84/jump-if-= $next-word-string-or-expression-without-metadata:regular-word-break/disp32
|
||||||
# if (line->data[line->read] == '/') goto error5
|
# if (line->data[line->read] == '/') goto error5
|
||||||
3d/compare-eax-and 0x2f/imm32/slash
|
3d/compare-eax-and 0x2f/imm32/slash
|
||||||
0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:error5/disp32
|
0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error5/disp32
|
||||||
# ++line->read
|
# ++line->read
|
||||||
ff 0/subop/increment *(esi+4)
|
ff 0/subop/increment *(esi+4)
|
||||||
# loop
|
# loop
|
||||||
|
|
|
@ -47,7 +47,7 @@ Entry: # run tests if necessary, call 'compile' if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto run-main
|
# if (argc <= 1) goto run-main
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $run-main/disp8
|
7e/jump-if-<= $run-main/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -59,7 +59,7 @@ Entry: # run tests if necessary, call 'compile' if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto run-main
|
# . if (eax == false) goto run-main
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $run-main/disp8
|
74/jump-if-= $run-main/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -224,7 +224,7 @@ get-num: # in : (addr buffered-file), out : (addr stream byte), err : fd or (ad
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax == false)
|
# . if (eax == false)
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
75/jump-if-not-equal $get-num:main/disp8
|
75/jump-if-!= $get-num:main/disp8
|
||||||
# . expected(ed, err, "integer")
|
# . expected(ed, err, "integer")
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "integer"/imm32
|
68/push "integer"/imm32
|
||||||
|
@ -255,7 +255,7 @@ $get-num:main:
|
||||||
$get-num:loop:
|
$get-num:loop:
|
||||||
# if (out->write >= out->length) error
|
# if (out->write >= out->length) error
|
||||||
39/compare 3/mod/direct 2/rm32/edx . . . 1/r32/ecx . . # compare edx with ecx
|
39/compare 3/mod/direct 2/rm32/edx . . . 1/r32/ecx . . # compare edx with ecx
|
||||||
7d/jump-if-lesser $get-num:stage2/disp8
|
7d/jump-if-< $get-num:stage2/disp8
|
||||||
# . error(ed, err, msg) # TODO: show full number
|
# . error(ed, err, msg) # TODO: show full number
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "get-num: too many digits in number"/imm32
|
68/push "get-num: too many digits in number"/imm32
|
||||||
|
@ -543,10 +543,10 @@ is-digit?: # c : int -> eax : boolean
|
||||||
b8/copy-to-eax 0/imm32
|
b8/copy-to-eax 0/imm32
|
||||||
# if (c < '0') return false
|
# if (c < '0') return false
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x30/imm32 # compare *(ebp+8)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x30/imm32 # compare *(ebp+8)
|
||||||
7c/jump-if-lesser $is-digit?:end/disp8
|
7c/jump-if-< $is-digit?:end/disp8
|
||||||
# if (c > '9') return false
|
# if (c > '9') return false
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x39/imm32 # compare *(ebp+8)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x39/imm32 # compare *(ebp+8)
|
||||||
7f/jump-if-greater $is-digit?:end/disp8
|
7f/jump-if-> $is-digit?:end/disp8
|
||||||
# otherwise return true
|
# otherwise return true
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
$is-digit?:end:
|
$is-digit?:end:
|
||||||
|
|
|
@ -47,7 +47,7 @@ Entry: # run tests if necessary, call 'compile' if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto run-main
|
# if (argc <= 1) goto run-main
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $run-main/disp8
|
7e/jump-if-<= $run-main/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -59,7 +59,7 @@ Entry: # run tests if necessary, call 'compile' if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto run-main
|
# . if (eax == false) goto run-main
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $run-main/disp8
|
74/jump-if-= $run-main/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -229,7 +229,7 @@ get-num: # in : (addr buffered-file), out : (addr stream byte), err : fd or (ad
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax == false)
|
# . if (eax == false)
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
75/jump-if-not-equal $get-num:main/disp8
|
75/jump-if-!= $get-num:main/disp8
|
||||||
# . expected(ed, err, "integer")
|
# . expected(ed, err, "integer")
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "integer"/imm32
|
68/push "integer"/imm32
|
||||||
|
@ -260,7 +260,7 @@ $get-num:main:
|
||||||
$get-num:loop:
|
$get-num:loop:
|
||||||
# if (out->write >= out->length) error
|
# if (out->write >= out->length) error
|
||||||
39/compare 3/mod/direct 2/rm32/edx . . . 1/r32/ecx . . # compare edx with ecx
|
39/compare 3/mod/direct 2/rm32/edx . . . 1/r32/ecx . . # compare edx with ecx
|
||||||
7d/jump-if-lesser $get-num:loop-stage2/disp8
|
7d/jump-if-< $get-num:loop-stage2/disp8
|
||||||
# . error(ed, err, msg) # TODO: show full number
|
# . error(ed, err, msg) # TODO: show full number
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "get-num: too many digits in number"/imm32
|
68/push "get-num: too many digits in number"/imm32
|
||||||
|
@ -294,7 +294,7 @@ $get-num:loop-stage2:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) loop
|
# . if (eax != false) loop
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $get-num:loop/disp32
|
0f 85/jump-if-!= $get-num:loop/disp32
|
||||||
$get-num:loop-end:
|
$get-num:loop-end:
|
||||||
# persist necessary variables from registers
|
# persist necessary variables from registers
|
||||||
89/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # copy ecx to *edi
|
89/copy 0/mod/indirect 7/rm32/edi . . . 1/r32/ecx . . # copy ecx to *edi
|
||||||
|
@ -737,10 +737,10 @@ is-digit?: # c : int -> eax : boolean
|
||||||
b8/copy-to-eax 0/imm32
|
b8/copy-to-eax 0/imm32
|
||||||
# if (c < '0') return false
|
# if (c < '0') return false
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x30/imm32 # compare *(ebp+8)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x30/imm32 # compare *(ebp+8)
|
||||||
7c/jump-if-lesser $is-digit?:end/disp8
|
7c/jump-if-< $is-digit?:end/disp8
|
||||||
# if (c > '9') return false
|
# if (c > '9') return false
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x39/imm32 # compare *(ebp+8)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 0x39/imm32 # compare *(ebp+8)
|
||||||
7f/jump-if-greater $is-digit?:end/disp8
|
7f/jump-if-> $is-digit?:end/disp8
|
||||||
# otherwise return true
|
# otherwise return true
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
$is-digit?:end:
|
$is-digit?:end:
|
||||||
|
|
|
@ -36,7 +36,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run-tests()
|
# - if argc > 1 and argv[1] == "test", then return run-tests()
|
||||||
# if (argc <= 1) goto interactive
|
# if (argc <= 1) goto interactive
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $subx-dquotes-main:interactive/disp8
|
7e/jump-if-<= $subx-dquotes-main:interactive/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -48,7 +48,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto interactive
|
# . if (eax == false) goto interactive
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-dquotes-main:interactive/disp8
|
74/jump-if-= $subx-dquotes-main:interactive/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -174,7 +174,7 @@ $subx-dquotes:line-loop:
|
||||||
$subx-dquotes:check0:
|
$subx-dquotes:check0:
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
||||||
0f 84/jump-if-equal $subx-dquotes:break/disp32
|
0f 84/jump-if-= $subx-dquotes:break/disp32
|
||||||
$subx-dquotes:word-loop:
|
$subx-dquotes:word-loop:
|
||||||
# next-word-or-string(line, word-slice)
|
# next-word-or-string(line, word-slice)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -195,7 +195,7 @@ $subx-dquotes:check1:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) break
|
# . if (eax != false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $subx-dquotes:next-line/disp32
|
0f 85/jump-if-!= $subx-dquotes:next-line/disp32
|
||||||
$subx-dquotes:check-for-comment:
|
$subx-dquotes:check-for-comment:
|
||||||
# if (slice-starts-with?(word-slice, "#")) continue
|
# if (slice-starts-with?(word-slice, "#")) continue
|
||||||
# . var start/esi : (addr byte) = word-slice->start
|
# . var start/esi : (addr byte) = word-slice->start
|
||||||
|
@ -205,11 +205,11 @@ $subx-dquotes:check-for-comment:
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
||||||
# . if (c == '#') continue
|
# . if (c == '#') continue
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
74/jump-if-equal $subx-dquotes:word-loop/disp8
|
74/jump-if-= $subx-dquotes:word-loop/disp8
|
||||||
$subx-dquotes:check-for-string-literal:
|
$subx-dquotes:check-for-string-literal:
|
||||||
# if (slice-starts-with?(word-slice, '"')) continue
|
# if (slice-starts-with?(word-slice, '"')) continue
|
||||||
3d/compare-eax-and 0x22/imm32/dquote
|
3d/compare-eax-and 0x22/imm32/dquote
|
||||||
75/jump-if-not-equal $subx-dquotes:regular-word/disp8
|
75/jump-if-!= $subx-dquotes:regular-word/disp8
|
||||||
$subx-dquotes:string-literal:
|
$subx-dquotes:string-literal:
|
||||||
# process-string-literal(word-slice, out, new-data-segment)
|
# process-string-literal(word-slice, out, new-data-segment)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -925,25 +925,25 @@ $emit-string-literal-data:loop-init:
|
||||||
$emit-string-literal-data:loop:
|
$emit-string-literal-data:loop:
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 2/rm32/edx . . . 6/r32/esi . . # compare edx with esi
|
39/compare 3/mod/direct 2/rm32/edx . . . 6/r32/esi . . # compare edx with esi
|
||||||
0f 83/jump-if-greater-or-equal-unsigned $emit-string-literal-data:end/disp32
|
0f 83/jump-if-addr>= $emit-string-literal-data:end/disp32
|
||||||
# CL = *curr
|
# CL = *curr
|
||||||
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 1/r32/CL . . # copy byte at *edx to CL
|
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 1/r32/CL . . # copy byte at *edx to CL
|
||||||
# if (c == '"') break
|
# if (c == '"') break
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x22/imm32/dquote # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x22/imm32/dquote # compare ecx
|
||||||
0f 84/jump-if-equal $emit-string-literal-data:end/disp32
|
0f 84/jump-if-= $emit-string-literal-data:end/disp32
|
||||||
# if (c != '\') goto emit
|
# if (c != '\') goto emit
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x5c/imm32/backslash # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x5c/imm32/backslash # compare ecx
|
||||||
75/jump-if-not-equal $emit-string-literal-data:emit/disp8
|
75/jump-if-!= $emit-string-literal-data:emit/disp8
|
||||||
# ++curr
|
# ++curr
|
||||||
42/increment-edx
|
42/increment-edx
|
||||||
# if (curr >= max) break
|
# if (curr >= max) break
|
||||||
39/compare 3/mod/direct 2/rm32/edx . . . 6/r32/esi . . # compare edx with esi
|
39/compare 3/mod/direct 2/rm32/edx . . . 6/r32/esi . . # compare edx with esi
|
||||||
0f 83/jump-if-greater-or-equal-unsigned $emit-string-literal-data:end/disp32
|
0f 83/jump-if-addr>= $emit-string-literal-data:end/disp32
|
||||||
# c = *curr
|
# c = *curr
|
||||||
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 1/r32/CL . . # copy byte at *edx to CL
|
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 1/r32/CL . . # copy byte at *edx to CL
|
||||||
# if (c == 'n') c = newline
|
# if (c == 'n') c = newline
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x6e/imm32/n # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0x6e/imm32/n # compare ecx
|
||||||
75/jump-if-not-equal $emit-string-literal-data:emit/disp8
|
75/jump-if-!= $emit-string-literal-data:emit/disp8
|
||||||
b9/copy-to-ecx 0x0a/imm32/newline
|
b9/copy-to-ecx 0x0a/imm32/newline
|
||||||
$emit-string-literal-data:emit:
|
$emit-string-literal-data:emit:
|
||||||
# append-byte-hex(out, CL)
|
# append-byte-hex(out, CL)
|
||||||
|
@ -964,7 +964,7 @@ $emit-string-literal-data:emit:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax == false) goto char-done
|
# . if (eax == false) goto char-done
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-string-literal-data:char-done/disp8
|
74/jump-if-= $emit-string-literal-data:char-done/disp8
|
||||||
# . write(out, "/")
|
# . write(out, "/")
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push Slash/imm32
|
68/push Slash/imm32
|
||||||
|
@ -996,7 +996,7 @@ $emit-string-literal-data:char-done:
|
||||||
43/increment-ebx
|
43/increment-ebx
|
||||||
# if (idx < 0x40) continue
|
# if (idx < 0x40) continue
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x40/imm32 # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x40/imm32 # compare ebx
|
||||||
7c/jump-if-lesser $emit-string-literal-data:next-char/disp8
|
7c/jump-if-< $emit-string-literal-data:next-char/disp8
|
||||||
# idx = 0
|
# idx = 0
|
||||||
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
|
31/xor 3/mod/direct 3/rm32/ebx . . . 3/r32/ebx . . # clear ebx
|
||||||
# write(out, "\n")
|
# write(out, "\n")
|
||||||
|
@ -1029,22 +1029,22 @@ is-alphanumeric?: # c : int -> eax : boolean
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 . # copy *(ebp+8) to eax
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . . 0/r32/eax 8/disp8 . # copy *(ebp+8) to eax
|
||||||
# if (c < '0') return false
|
# if (c < '0') return false
|
||||||
3d/compare-eax-with 0x30/imm32/0
|
3d/compare-eax-with 0x30/imm32/0
|
||||||
7c/jump-if-lesser $is-alphanumeric?:false/disp8
|
7c/jump-if-< $is-alphanumeric?:false/disp8
|
||||||
# if (c <= '9') return true
|
# if (c <= '9') return true
|
||||||
3d/compare-eax-with 0x39/imm32/9
|
3d/compare-eax-with 0x39/imm32/9
|
||||||
7e/jump-if-lesser-or-equal $is-alphanumeric?:true/disp8
|
7e/jump-if-<= $is-alphanumeric?:true/disp8
|
||||||
# if (c < 'A') return false
|
# if (c < 'A') return false
|
||||||
3d/compare-eax-with 0x41/imm32/A
|
3d/compare-eax-with 0x41/imm32/A
|
||||||
7c/jump-if-lesser $is-alphanumeric?:false/disp8
|
7c/jump-if-< $is-alphanumeric?:false/disp8
|
||||||
# if (c <= 'Z') return true
|
# if (c <= 'Z') return true
|
||||||
3d/compare-eax-with 0x5a/imm32/Z
|
3d/compare-eax-with 0x5a/imm32/Z
|
||||||
7e/jump-if-lesser-or-equal $is-alphanumeric?:true/disp8
|
7e/jump-if-<= $is-alphanumeric?:true/disp8
|
||||||
# if (c < 'a') return false
|
# if (c < 'a') return false
|
||||||
3d/compare-eax-with 0x61/imm32/a
|
3d/compare-eax-with 0x61/imm32/a
|
||||||
7c/jump-if-lesser $is-alphanumeric?:false/disp8
|
7c/jump-if-< $is-alphanumeric?:false/disp8
|
||||||
# if (c <= 'z') return true
|
# if (c <= 'z') return true
|
||||||
3d/compare-eax-with 0x7a/imm32/z
|
3d/compare-eax-with 0x7a/imm32/z
|
||||||
7e/jump-if-lesser-or-equal $is-alphanumeric?:true/disp8
|
7e/jump-if-<= $is-alphanumeric?:true/disp8
|
||||||
# return false
|
# return false
|
||||||
$is-alphanumeric?:false:
|
$is-alphanumeric?:false:
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
|
@ -1420,7 +1420,7 @@ $emit-metadata:check-for-string-literal:
|
||||||
# - if (*curr == '"') curr = skip-string-in-slice(curr, end)
|
# - if (*curr == '"') curr = skip-string-in-slice(curr, end)
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
3d/compare-eax-and 0x22/imm32/dquote
|
3d/compare-eax-and 0x22/imm32/dquote
|
||||||
75/jump-if-not-equal $emit-metadata:skip-datum-loop/disp8
|
75/jump-if-!= $emit-metadata:skip-datum-loop/disp8
|
||||||
$emit-metadata:skip-string-literal:
|
$emit-metadata:skip-string-literal:
|
||||||
# . eax = skip-string-in-slice(curr, end)
|
# . eax = skip-string-in-slice(curr, end)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1437,11 +1437,11 @@ $emit-metadata:skip-datum-loop:
|
||||||
# - otherwise scan for '/'
|
# - otherwise scan for '/'
|
||||||
# if (curr == end) return
|
# if (curr == end) return
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx and edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx and edx
|
||||||
74/jump-if-equal $emit-metadata:end/disp8
|
74/jump-if-= $emit-metadata:end/disp8
|
||||||
# if (*curr == '/') break
|
# if (*curr == '/') break
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
3d/compare-eax-and 0x2f/imm32/slash
|
3d/compare-eax-and 0x2f/imm32/slash
|
||||||
74/jump-if-equal $emit-metadata:emit/disp8
|
74/jump-if-= $emit-metadata:emit/disp8
|
||||||
# ++curr
|
# ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
eb/jump $emit-metadata:skip-datum-loop/disp8
|
eb/jump $emit-metadata:skip-datum-loop/disp8
|
||||||
|
@ -1799,17 +1799,17 @@ string-length-at-start-of-slice: # curr : (addr byte), end : (addr byte) -> len
|
||||||
$string-length-at-start-of-slice:loop:
|
$string-length-at-start-of-slice:loop:
|
||||||
# if (curr >= end) return length
|
# if (curr >= end) return length
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-unsigned-or-equal $string-length-at-start-of-slice:end/disp8
|
73/jump-if-addr>= $string-length-at-start-of-slice:end/disp8
|
||||||
# c = *curr
|
# c = *curr
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 3/r32/BL . . # copy byte at *ecx to BL
|
||||||
$string-length-at-start-of-slice:dquote:
|
$string-length-at-start-of-slice:dquote:
|
||||||
# if (c == '"') break
|
# if (c == '"') break
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x22/imm32/dquote # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x22/imm32/dquote # compare ebx
|
||||||
74/jump-if-equal $string-length-at-start-of-slice:end/disp8
|
74/jump-if-= $string-length-at-start-of-slice:end/disp8
|
||||||
$string-length-at-start-of-slice:check-for-escape:
|
$string-length-at-start-of-slice:check-for-escape:
|
||||||
# if (c == '\') escape next char
|
# if (c == '\') escape next char
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x5c/imm32/backslash # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x5c/imm32/backslash # compare ebx
|
||||||
75/jump-if-not-equal $string-length-at-start-of-slice:continue/disp8
|
75/jump-if-!= $string-length-at-start-of-slice:continue/disp8
|
||||||
$string-length-at-start-of-slice:escape:
|
$string-length-at-start-of-slice:escape:
|
||||||
# increment curr but not result
|
# increment curr but not result
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
|
|
|
@ -45,10 +45,10 @@ $argv-equal:loop:
|
||||||
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 3/r32/BL . . # copy byte at *edx to BL
|
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 3/r32/BL . . # copy byte at *edx to BL
|
||||||
# if (c1 == 0) break
|
# if (c1 == 0) break
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $argv-equal:break/disp8
|
74/jump-if-= $argv-equal:break/disp8
|
||||||
# if (c1 != c2) return false
|
# if (c1 != c2) return false
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
||||||
75/jump-if-not-equal $argv-equal:false/disp8
|
75/jump-if-!= $argv-equal:false/disp8
|
||||||
# ++s1, ++s2
|
# ++s1, ++s2
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
42/increment-edx
|
42/increment-edx
|
||||||
|
@ -57,7 +57,7 @@ $argv-equal:loop:
|
||||||
$argv-equal:break:
|
$argv-equal:break:
|
||||||
# if (c2 == 0) return true
|
# if (c2 == 0) return true
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32 # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32 # compare ebx
|
||||||
75/jump-if-not-equal $argv-equal:false/disp8
|
75/jump-if-!= $argv-equal:false/disp8
|
||||||
$argv-equal:success:
|
$argv-equal:success:
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
c3/return
|
c3/return
|
||||||
|
|
|
@ -73,17 +73,17 @@ kernel-string-equal?: # s : null-terminated ascii string, benchmark : length-pr
|
||||||
$kernel-string-equal?:loop:
|
$kernel-string-equal?:loop:
|
||||||
# if (i >= n) break
|
# if (i >= n) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
7d/jump-if-greater-or-equal $kernel-string-equal?:break/disp8
|
7d/jump-if->= $kernel-string-equal?:break/disp8
|
||||||
# c1 = *s1
|
# c1 = *s1
|
||||||
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 0/r32/AL . . # copy byte at *edi to AL
|
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 0/r32/AL . . # copy byte at *edi to AL
|
||||||
# c2 = *s2
|
# c2 = *s2
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 3/r32/BL . . # copy byte at *esi to BL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 3/r32/BL . . # copy byte at *esi to BL
|
||||||
# if (c1 == 0) return false
|
# if (c1 == 0) return false
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $kernel-string-equal?:false/disp8
|
74/jump-if-= $kernel-string-equal?:false/disp8
|
||||||
# if (c1 != c2) return false
|
# if (c1 != c2) return false
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
39/compare 3/mod/direct 0/rm32/eax . . . 3/r32/ebx . . # compare eax and ebx
|
||||||
75/jump-if-not-equal $kernel-string-equal?:false/disp8
|
75/jump-if-!= $kernel-string-equal?:false/disp8
|
||||||
# ++i
|
# ++i
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# ++s1
|
# ++s1
|
||||||
|
@ -95,7 +95,7 @@ $kernel-string-equal?:break:
|
||||||
# return *s1 == 0
|
# return *s1 == 0
|
||||||
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 0/r32/AL . . # copy byte at *edi to AL
|
8a/copy-byte 0/mod/indirect 7/rm32/edi . . . 0/r32/AL . . # copy byte at *edi to AL
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal $kernel-string-equal?:false/disp8
|
75/jump-if-!= $kernel-string-equal?:false/disp8
|
||||||
$kernel-string-equal?:true:
|
$kernel-string-equal?:true:
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
eb/jump $kernel-string-equal?:end/disp8
|
eb/jump $kernel-string-equal?:end/disp8
|
||||||
|
|
|
@ -21,7 +21,7 @@ Entry:
|
||||||
$loop:
|
$loop:
|
||||||
# if (counter > 10) break
|
# if (counter > 10) break
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0xa/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0xa/imm32 # compare ecx
|
||||||
7f/jump-if-greater $exit/disp8
|
7f/jump-if-> $exit/disp8
|
||||||
# result += counter
|
# result += counter
|
||||||
01/add 3/mod/direct 3/rm32/ebx . . . 1/r32/ecx . . # add ecx to ebx
|
01/add 3/mod/direct 3/rm32/ebx . . . 1/r32/ecx . . # add ecx to ebx
|
||||||
# ++counter
|
# ++counter
|
||||||
|
|
|
@ -44,7 +44,7 @@ $ascii-length:loop:
|
||||||
8a/copy-byte 0/mod/* 2/rm32/edx . . . 1/r32/CL . . # copy byte at *edx to CL
|
8a/copy-byte 0/mod/* 2/rm32/edx . . . 1/r32/CL . . # copy byte at *edx to CL
|
||||||
# if (c == '\0') break
|
# if (c == '\0') break
|
||||||
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0/imm32 # compare ecx
|
81 7/subop/compare 3/mod/direct 1/rm32/ecx . . . . . 0/imm32 # compare ecx
|
||||||
74/jump-if-equal $ascii-length:end/disp8
|
74/jump-if-= $ascii-length:end/disp8
|
||||||
# ++s
|
# ++s
|
||||||
42/increment-edx
|
42/increment-edx
|
||||||
# ++result
|
# ++result
|
||||||
|
|
|
@ -35,7 +35,7 @@ Entry: # run tests if necessary, compute `factorial(5)` if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto run-main
|
# if (argc <= 1) goto run-main
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $run-main/disp8
|
7e/jump-if-<= $run-main/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -47,7 +47,7 @@ Entry: # run tests if necessary, compute `factorial(5)` if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto run-main
|
# . if (eax == false) goto run-main
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $run-main/disp8
|
74/jump-if-= $run-main/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
|
|
@ -35,7 +35,7 @@ Entry: # run tests if necessary, compute `factorial(5)` if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto run-main
|
# if (argc <= 1) goto run-main
|
||||||
81 7/subop/compare *ebp 1/imm32
|
81 7/subop/compare *ebp 1/imm32
|
||||||
7e/jump-if-lesser-or-equal $run-main/disp8
|
7e/jump-if-<= $run-main/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -47,7 +47,7 @@ Entry: # run tests if necessary, compute `factorial(5)` if not
|
||||||
81 0/subop/add %esp 8/imm32
|
81 0/subop/add %esp 8/imm32
|
||||||
# . if (eax == false) goto run-main
|
# . if (eax == false) goto run-main
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $run-main/disp8
|
74/jump-if-= $run-main/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
|
|
@ -29,12 +29,12 @@ Entry: # run tests if necessary, compute `factorial(5)` if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto run-main
|
# if (argc <= 1) goto run-main
|
||||||
81 7/subop/compare *ebp 1/imm32
|
81 7/subop/compare *ebp 1/imm32
|
||||||
7e/jump-if-lesser-or-equal $run-main/disp8
|
7e/jump-if-<= $run-main/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
||||||
(kernel-string-equal? *(ebp+8) "test") # => eax
|
(kernel-string-equal? *(ebp+8) "test") # => eax
|
||||||
# . if (eax == false) goto run-main
|
# . if (eax == false) goto run-main
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $run-main/disp8
|
74/jump-if-= $run-main/disp8
|
||||||
#
|
#
|
||||||
(run-tests)
|
(run-tests)
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
|
|
@ -31,11 +31,11 @@ Entry: # run tests if necessary, compute `factorial(5)` if not
|
||||||
{
|
{
|
||||||
# if (argc <= 1) break
|
# if (argc <= 1) break
|
||||||
81 7/subop/compare *ebp 1/imm32
|
81 7/subop/compare *ebp 1/imm32
|
||||||
7e/jump-if-lesser-or-equal break/disp8
|
7e/jump-if-<= break/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) break
|
# if (!kernel-string-equal?(argv[1], "test")) break
|
||||||
(kernel-string-equal? *(ebp+8) "test") # => eax
|
(kernel-string-equal? *(ebp+8) "test") # => eax
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
#
|
#
|
||||||
(run-tests)
|
(run-tests)
|
||||||
# eax = *Num-test-failures
|
# eax = *Num-test-failures
|
||||||
|
@ -45,7 +45,7 @@ Entry: # run tests if necessary, compute `factorial(5)` if not
|
||||||
{
|
{
|
||||||
# if (argc > 1) break
|
# if (argc > 1) break
|
||||||
81 7/subop/compare *ebp 1/imm32
|
81 7/subop/compare *ebp 1/imm32
|
||||||
7f/jump-if-greater break/disp8
|
7f/jump-if-> break/disp8
|
||||||
# eax = factorial(5)
|
# eax = factorial(5)
|
||||||
(factorial 5)
|
(factorial 5)
|
||||||
# syscall(exit, eax)
|
# syscall(exit, eax)
|
||||||
|
@ -64,12 +64,12 @@ factorial: # n : int -> int/eax
|
||||||
# if (n <= 1) return 1
|
# if (n <= 1) return 1
|
||||||
81 7/subop/compare *(ebp+8) 1/imm32
|
81 7/subop/compare *(ebp+8) 1/imm32
|
||||||
{
|
{
|
||||||
7f/jump-if-greater break/disp8
|
7f/jump-if-> break/disp8
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
}
|
}
|
||||||
# if (n > 1) return n * factorial(n-1)
|
# if (n > 1) return n * factorial(n-1)
|
||||||
{
|
{
|
||||||
7e/jump-if-lesser-or-equal break/disp8
|
7e/jump-if-<= break/disp8
|
||||||
# var ebx : int = n-1
|
# var ebx : int = n-1
|
||||||
8b/-> *(ebp+8) 3/r32/ebx
|
8b/-> *(ebp+8) 3/r32/ebx
|
||||||
4b/decrement-ebx
|
4b/decrement-ebx
|
||||||
|
|
|
@ -69,7 +69,7 @@ new: # ad : (addr allocation-descriptor), n : int, out : (handle _)
|
||||||
89/copy 1/mod/*+disp8 2/rm32/edx . . . 0/r32/eax 4/disp8 . # copy eax to *(edx+4)
|
89/copy 1/mod/*+disp8 2/rm32/edx . . . 0/r32/eax 4/disp8 . # copy eax to *(edx+4)
|
||||||
# if (eax == 0) out->alloc_id = 0, return
|
# if (eax == 0) out->alloc_id = 0, return
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal $new:continue/disp8
|
75/jump-if-!= $new:continue/disp8
|
||||||
c7 0/subop/copy 0/mod/indirect 2/rm32/edx . . . . . 0/imm32 # copy to *edx
|
c7 0/subop/copy 0/mod/indirect 2/rm32/edx . . . . . 0/imm32 # copy to *edx
|
||||||
eb/jump $new:end/disp8
|
eb/jump $new:end/disp8
|
||||||
$new:continue:
|
$new:continue:
|
||||||
|
@ -239,7 +239,7 @@ lookup: # h : (handle T) -> eax : (addr T)
|
||||||
8b/copy 0/mod/indirect 0/rm32/eax . . . . . . # copy *eax to eax
|
8b/copy 0/mod/indirect 0/rm32/eax . . . . . . # copy *eax to eax
|
||||||
# if (eax != handle->alloc_id) abort
|
# if (eax != handle->alloc_id) abort
|
||||||
39/compare 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none . 0/r32/eax 4/disp8 . # compare *(esp+4) and eax
|
39/compare 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none . 0/r32/eax 4/disp8 . # compare *(esp+4) and eax
|
||||||
75/jump-if-not-equal $lookup:abort/disp8
|
75/jump-if-!= $lookup:abort/disp8
|
||||||
# eax = pop handle->address
|
# eax = pop handle->address
|
||||||
58/pop-to-eax
|
58/pop-to-eax
|
||||||
# discard handle->alloc_id
|
# discard handle->alloc_id
|
||||||
|
@ -254,7 +254,7 @@ lookup: # h : (handle T) -> eax : (addr T)
|
||||||
#? 8b/copy 1/mod/*+disp8 0/rm32/eax . . . 0/r32/eax 4/disp8 . # copy *(eax+4) to eax
|
#? 8b/copy 1/mod/*+disp8 0/rm32/eax . . . 0/r32/eax 4/disp8 . # copy *(eax+4) to eax
|
||||||
#? # if (ecx != *eax) abort
|
#? # if (ecx != *eax) abort
|
||||||
#? 39/compare 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # compare *eax and ecx
|
#? 39/compare 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # compare *eax and ecx
|
||||||
#? 75/jump-if-not-equal $lookup:abort/disp8
|
#? 75/jump-if-!= $lookup:abort/disp8
|
||||||
#? # add 4 to eax
|
#? # add 4 to eax
|
||||||
#? 05/add-to-eax 4/imm32
|
#? 05/add-to-eax 4/imm32
|
||||||
# - }
|
# - }
|
||||||
|
|
|
@ -34,7 +34,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto interactive
|
# if (argc <= 1) goto interactive
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $subx-hex-main:interactive/disp8
|
7e/jump-if-<= $subx-hex-main:interactive/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -46,7 +46,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto interactive
|
# . if (eax == false) goto interactive
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-hex-main:interactive/disp8
|
74/jump-if-= $subx-hex-main:interactive/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -102,7 +102,7 @@ $subx-hex:loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# if (eax == Eof) break
|
# if (eax == Eof) break
|
||||||
3d/compare-eax-and 0xffffffff/imm32/Eof
|
3d/compare-eax-and 0xffffffff/imm32/Eof
|
||||||
74/jump-if-equal $subx-hex:loop-end/disp8
|
74/jump-if-= $subx-hex:loop-end/disp8
|
||||||
# write-byte-buffered(out, AL)
|
# write-byte-buffered(out, AL)
|
||||||
# . . push args
|
# . . push args
|
||||||
50/push-eax
|
50/push-eax
|
||||||
|
@ -162,7 +162,7 @@ convert-next-octet: # in : (addr buffered-file), err : (addr buffered-file), ed
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# if (eax == Eof) return
|
# if (eax == Eof) return
|
||||||
3d/compare-eax-and 0xffffffff/imm32/Eof
|
3d/compare-eax-and 0xffffffff/imm32/Eof
|
||||||
74/jump-if-equal $convert-next-octet:end/disp8
|
74/jump-if-= $convert-next-octet:end/disp8
|
||||||
# eax = from-hex-char(eax)
|
# eax = from-hex-char(eax)
|
||||||
e8/call from-hex-char/disp32
|
e8/call from-hex-char/disp32
|
||||||
# ecx = eax
|
# ecx = eax
|
||||||
|
@ -178,7 +178,7 @@ convert-next-octet: # in : (addr buffered-file), err : (addr buffered-file), ed
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# if (eax == Eof) error(ed, err, "partial byte found.")
|
# if (eax == Eof) error(ed, err, "partial byte found.")
|
||||||
3d/compare-eax-and 0xffffffff/imm32/Eof
|
3d/compare-eax-and 0xffffffff/imm32/Eof
|
||||||
75/jump-if-not-equal $convert-next-octet:convert/disp8
|
75/jump-if-!= $convert-next-octet:convert/disp8
|
||||||
# . error-byte(ed, err, msg, '.') # reusing error-byte to avoid creating _yet_ another helper
|
# . error-byte(ed, err, msg, '.') # reusing error-byte to avoid creating _yet_ another helper
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push 0x2e/imm32/period/dummy
|
68/push 0x2e/imm32/period/dummy
|
||||||
|
@ -284,7 +284,7 @@ test-convert-next-octet:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# return if abort
|
# return if abort
|
||||||
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
||||||
75/jump-if-not-equal $test-convert-next-octet:end/disp8
|
75/jump-if-!= $test-convert-next-octet:end/disp8
|
||||||
# check-ints-equal(eax, 0xab, msg)
|
# check-ints-equal(eax, 0xab, msg)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "F - test-convert-next-octet"/imm32
|
68/push "F - test-convert-next-octet"/imm32
|
||||||
|
@ -374,7 +374,7 @@ test-convert-next-octet-handles-Eof:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# return if abort
|
# return if abort
|
||||||
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
||||||
75/jump-if-not-equal $test-convert-next-octet-handles-Eof:end/disp8
|
75/jump-if-!= $test-convert-next-octet-handles-Eof:end/disp8
|
||||||
# check-ints-equal(eax, Eof, msg)
|
# check-ints-equal(eax, Eof, msg)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "F - test-convert-next-octet-handles-Eof"/imm32
|
68/push "F - test-convert-next-octet-handles-Eof"/imm32
|
||||||
|
@ -505,7 +505,7 @@ $scan-next-byte:loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# if (eax == Eof) return eax
|
# if (eax == Eof) return eax
|
||||||
3d/compare-with-eax 0xffffffff/imm32/Eof
|
3d/compare-with-eax 0xffffffff/imm32/Eof
|
||||||
74/jump-if-equal $scan-next-byte:end/disp8
|
74/jump-if-= $scan-next-byte:end/disp8
|
||||||
# if (is-hex-digit?(eax)) return eax
|
# if (is-hex-digit?(eax)) return eax
|
||||||
# . save eax for now
|
# . save eax for now
|
||||||
50/push-eax
|
50/push-eax
|
||||||
|
@ -521,21 +521,21 @@ $scan-next-byte:loop:
|
||||||
# . restore eax (does not affect flags)
|
# . restore eax (does not affect flags)
|
||||||
58/pop-to-eax
|
58/pop-to-eax
|
||||||
# . check whether to return
|
# . check whether to return
|
||||||
75/jump-if-not-equal $scan-next-byte:end/disp8
|
75/jump-if-!= $scan-next-byte:end/disp8
|
||||||
$scan-next-byte:check1:
|
$scan-next-byte:check1:
|
||||||
# if (eax == ' ') continue
|
# if (eax == ' ') continue
|
||||||
3d/compare-eax-and 0x20/imm32/space
|
3d/compare-eax-and 0x20/imm32/space
|
||||||
74/jump-if-equal $scan-next-byte:loop/disp8
|
74/jump-if-= $scan-next-byte:loop/disp8
|
||||||
# if (eax == '\t') continue
|
# if (eax == '\t') continue
|
||||||
3d/compare-eax-and 9/imm32/tab
|
3d/compare-eax-and 9/imm32/tab
|
||||||
74/jump-if-equal $scan-next-byte:loop/disp8
|
74/jump-if-= $scan-next-byte:loop/disp8
|
||||||
# if (eax == '\n') continue
|
# if (eax == '\n') continue
|
||||||
3d/compare-eax-and 0xa/imm32/newline
|
3d/compare-eax-and 0xa/imm32/newline
|
||||||
74/jump-if-equal $scan-next-byte:loop/disp8
|
74/jump-if-= $scan-next-byte:loop/disp8
|
||||||
$scan-next-byte:check2:
|
$scan-next-byte:check2:
|
||||||
# if (eax == '#') skip-until-newline(in)
|
# if (eax == '#') skip-until-newline(in)
|
||||||
3d/compare-with-eax 0x23/imm32
|
3d/compare-with-eax 0x23/imm32
|
||||||
75/jump-if-not-equal $scan-next-byte:check3/disp8
|
75/jump-if-!= $scan-next-byte:check3/disp8
|
||||||
# . skip-until-newline(in)
|
# . skip-until-newline(in)
|
||||||
# . . push args
|
# . . push args
|
||||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp . . . . 8/disp8 . # push *(ebp+8)
|
||||||
|
@ -641,7 +641,7 @@ test-scan-next-byte:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# return if abort
|
# return if abort
|
||||||
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
||||||
75/jump-if-not-equal $test-scan-next-byte:end/disp8
|
75/jump-if-!= $test-scan-next-byte:end/disp8
|
||||||
# check-ints-equal(eax, 0x61/a, msg)
|
# check-ints-equal(eax, 0x61/a, msg)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "F - test-scan-next-byte"/imm32
|
68/push "F - test-scan-next-byte"/imm32
|
||||||
|
@ -739,7 +739,7 @@ test-scan-next-byte-skips-whitespace:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# return if abort
|
# return if abort
|
||||||
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
||||||
75/jump-if-not-equal $test-scan-next-byte-skips-whitespace:end/disp8
|
75/jump-if-!= $test-scan-next-byte-skips-whitespace:end/disp8
|
||||||
# check-ints-equal(eax, 0x61/a, msg)
|
# check-ints-equal(eax, 0x61/a, msg)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "F - test-scan-next-byte-skips-whitespace"/imm32
|
68/push "F - test-scan-next-byte-skips-whitespace"/imm32
|
||||||
|
@ -845,7 +845,7 @@ test-scan-next-byte-skips-comment:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# return if abort
|
# return if abort
|
||||||
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
||||||
75/jump-if-not-equal $test-scan-next-byte-skips-comment:end/disp8
|
75/jump-if-!= $test-scan-next-byte-skips-comment:end/disp8
|
||||||
# check-ints-equal(eax, 0x61/a, msg)
|
# check-ints-equal(eax, 0x61/a, msg)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "F - test-scan-next-byte-skips-comment"/imm32
|
68/push "F - test-scan-next-byte-skips-comment"/imm32
|
||||||
|
@ -951,7 +951,7 @@ test-scan-next-byte-skips-comment-and-whitespace:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# return if abort
|
# return if abort
|
||||||
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
||||||
75/jump-if-not-equal $test-scan-next-byte-skips-comment-and-whitespace:end/disp8
|
75/jump-if-!= $test-scan-next-byte-skips-comment-and-whitespace:end/disp8
|
||||||
# check-ints-equal(eax, 0x61/a, msg)
|
# check-ints-equal(eax, 0x61/a, msg)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "F - test-scan-next-byte-skips-comment-and-whitespace"/imm32
|
68/push "F - test-scan-next-byte-skips-comment-and-whitespace"/imm32
|
||||||
|
@ -1059,7 +1059,7 @@ test-scan-next-byte-skips-whitespace-and-comment:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# return if abort
|
# return if abort
|
||||||
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
||||||
75/jump-if-not-equal $test-scan-next-byte-skips-whitespace-and-comment:end/disp8
|
75/jump-if-!= $test-scan-next-byte-skips-whitespace-and-comment:end/disp8
|
||||||
# check-ints-equal(eax, 0x61/a, msg)
|
# check-ints-equal(eax, 0x61/a, msg)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "F - test-scan-next-byte-skips-whitespace-and-comment"/imm32
|
68/push "F - test-scan-next-byte-skips-whitespace-and-comment"/imm32
|
||||||
|
@ -1157,7 +1157,7 @@ test-scan-next-byte-reads-final-byte:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# return if abort
|
# return if abort
|
||||||
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
||||||
75/jump-if-not-equal $test-scan-next-byte-reads-final-byte:end/disp8
|
75/jump-if-!= $test-scan-next-byte-reads-final-byte:end/disp8
|
||||||
# check-ints-equal(eax, 0x61/a, msg)
|
# check-ints-equal(eax, 0x61/a, msg)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "F - test-scan-next-byte-reads-final-byte"/imm32
|
68/push "F - test-scan-next-byte-reads-final-byte"/imm32
|
||||||
|
@ -1247,7 +1247,7 @@ test-scan-next-byte-handles-Eof:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# return if abort
|
# return if abort
|
||||||
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
81 7/subop/compare 1/mod/*+disp8 1/rm32/ecx . . . . 4/disp8 0/imm32 # compare *(ecx+4)
|
||||||
75/jump-if-not-equal $test-scan-next-byte-handles-Eof:end/disp8
|
75/jump-if-!= $test-scan-next-byte-handles-Eof:end/disp8
|
||||||
# check-ints-equal(eax, Eof, msg)
|
# check-ints-equal(eax, Eof, msg)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push "F - test-scan-next-byte-handles-Eof"/imm32
|
68/push "F - test-scan-next-byte-handles-Eof"/imm32
|
||||||
|
@ -1373,10 +1373,10 @@ $skip-until-newline:loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax == Eof) break
|
# . if (eax == Eof) break
|
||||||
3d/compare-eax-and 0xffffffff/imm32/Eof
|
3d/compare-eax-and 0xffffffff/imm32/Eof
|
||||||
74/jump-if-equal $skip-until-newline:end/disp8
|
74/jump-if-= $skip-until-newline:end/disp8
|
||||||
# . if (eax != 0xa/newline) loop
|
# . if (eax != 0xa/newline) loop
|
||||||
3d/compare-eax-and 0xa/imm32/newline
|
3d/compare-eax-and 0xa/imm32/newline
|
||||||
75/jump-if-not-equal $skip-until-newline:loop/disp8
|
75/jump-if-!= $skip-until-newline:loop/disp8
|
||||||
$skip-until-newline:end:
|
$skip-until-newline:end:
|
||||||
# . restore registers
|
# . restore registers
|
||||||
58/pop-to-eax
|
58/pop-to-eax
|
||||||
|
|
220
apps/mu.subx
220
apps/mu.subx
|
@ -374,11 +374,11 @@ Entry:
|
||||||
{
|
{
|
||||||
# if (argc <= 1) break
|
# if (argc <= 1) break
|
||||||
81 7/subop/compare *ebp 1/imm32
|
81 7/subop/compare *ebp 1/imm32
|
||||||
7e/jump-if-lesser-or-equal break/disp8
|
7e/jump-if-<= break/disp8
|
||||||
# if (argv[1] != "test") break
|
# if (argv[1] != "test") break
|
||||||
(kernel-string-equal? *(ebp+8) "test") # => eax
|
(kernel-string-equal? *(ebp+8) "test") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
#
|
#
|
||||||
(run-tests)
|
(run-tests)
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -1025,7 +1025,7 @@ $parse-mu:line-loop:
|
||||||
(read-line-buffered *(ebp+8) %ecx)
|
(read-line-buffered *(ebp+8) %ecx)
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare *ecx 0/imm32
|
81 7/subop/compare *ecx 0/imm32
|
||||||
0f 84/jump-if-equal break/disp32
|
0f 84/jump-if-= break/disp32
|
||||||
#? # dump line {{{
|
#? # dump line {{{
|
||||||
#? (write 2 "parse-mu: ^")
|
#? (write 2 "parse-mu: ^")
|
||||||
#? (write-stream 2 %ecx)
|
#? (write-stream 2 %ecx)
|
||||||
|
@ -1036,7 +1036,7 @@ $parse-mu:line-loop:
|
||||||
# if slice-empty?(word-slice) continue
|
# if slice-empty?(word-slice) continue
|
||||||
(slice-empty? %edx)
|
(slice-empty? %edx)
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal loop/disp32
|
0f 85/jump-if-!= loop/disp32
|
||||||
# if (*word-slice->start == "#") continue
|
# if (*word-slice->start == "#") continue
|
||||||
# . eax = *word-slice->start
|
# . eax = *word-slice->start
|
||||||
8b/-> *edx 0/r32/eax
|
8b/-> *edx 0/r32/eax
|
||||||
|
@ -1044,13 +1044,13 @@ $parse-mu:line-loop:
|
||||||
81 4/subop/and %eax 0xff/imm32
|
81 4/subop/and %eax 0xff/imm32
|
||||||
# . if (eax == '#') continue
|
# . if (eax == '#') continue
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal loop/disp32
|
0f 84/jump-if-= loop/disp32
|
||||||
# if (slice-equal?(word-slice, "fn")) parse a function
|
# if (slice-equal?(word-slice, "fn")) parse a function
|
||||||
{
|
{
|
||||||
$parse-mu:fn:
|
$parse-mu:fn:
|
||||||
(slice-equal? %edx "fn")
|
(slice-equal? %edx "fn")
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 84/jump-if-equal break/disp32
|
0f 84/jump-if-= break/disp32
|
||||||
# var new-function/eax : (handle function) = populate-mu-function(in, new-function, vars)
|
# var new-function/eax : (handle function) = populate-mu-function(in, new-function, vars)
|
||||||
(allocate Heap *Function-size) # => eax
|
(allocate Heap *Function-size) # => eax
|
||||||
(zero-out %eax *Function-size)
|
(zero-out %eax *Function-size)
|
||||||
|
@ -1169,15 +1169,15 @@ populate-mu-function-header: # first-line : (addr stream byte), out : (handle f
|
||||||
# if (word-slice == '{') abort
|
# if (word-slice == '{') abort
|
||||||
(slice-equal? %ecx "{") # => eax
|
(slice-equal? %ecx "{") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32
|
0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
|
||||||
# if (word-slice == '->') abort
|
# if (word-slice == '->') abort
|
||||||
(slice-equal? %ecx "->") # => eax
|
(slice-equal? %ecx "->") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32
|
0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
|
||||||
# if (word-slice == '}') abort
|
# if (word-slice == '}') abort
|
||||||
(slice-equal? %ecx "}") # => eax
|
(slice-equal? %ecx "}") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32
|
0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
|
||||||
# save function name
|
# save function name
|
||||||
(slice-to-string Heap %ecx) # => eax
|
(slice-to-string Heap %ecx) # => eax
|
||||||
89/<- *edi 0/r32/eax # Function-name
|
89/<- *edi 0/r32/eax # Function-name
|
||||||
|
@ -1190,21 +1190,21 @@ $populate-mu-function-header:check-for-inout:
|
||||||
# if (word-slice == '{') goto done
|
# if (word-slice == '{') goto done
|
||||||
(slice-equal? %ecx "{") # => eax
|
(slice-equal? %ecx "{") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $populate-mu-function-header:done/disp32
|
0f 85/jump-if-!= $populate-mu-function-header:done/disp32
|
||||||
# if (word-slice == '->') break
|
# if (word-slice == '->') break
|
||||||
(slice-equal? %ecx "->") # => eax
|
(slice-equal? %ecx "->") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal break/disp32
|
0f 85/jump-if-!= break/disp32
|
||||||
# if (word-slice == '}') abort
|
# if (word-slice == '}') abort
|
||||||
(slice-equal? %ecx "}") # => eax
|
(slice-equal? %ecx "}") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32
|
0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
|
||||||
# var v/ebx : (handle var) = parse-var-with-type(word-slice, first-line)
|
# var v/ebx : (handle var) = parse-var-with-type(word-slice, first-line)
|
||||||
(parse-var-with-type %ecx *(ebp+8)) # => eax
|
(parse-var-with-type %ecx *(ebp+8)) # => eax
|
||||||
89/<- %ebx 0/r32/eax
|
89/<- %ebx 0/r32/eax
|
||||||
# assert(v->register == null)
|
# assert(v->register == null)
|
||||||
81 7/subop/compare *(ebx+0x10) 0/imm32 # Var-register
|
81 7/subop/compare *(ebx+0x10) 0/imm32 # Var-register
|
||||||
0f 85/jump-if-not-equal $populate-mu-function-header:error2/disp32
|
0f 85/jump-if-!= $populate-mu-function-header:error2/disp32
|
||||||
# v->stack-offset = next-offset
|
# v->stack-offset = next-offset
|
||||||
89/<- *(ebx+0xc) 2/r32/edx # Var-stack-offset
|
89/<- *(ebx+0xc) 2/r32/edx # Var-stack-offset
|
||||||
# next-offset += size-of(v)
|
# next-offset += size-of(v)
|
||||||
|
@ -1224,21 +1224,21 @@ $parse-var-with-type:check-for-out:
|
||||||
# if (word-slice == '{') break
|
# if (word-slice == '{') break
|
||||||
(slice-equal? %ecx "{") # => eax
|
(slice-equal? %ecx "{") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal break/disp32
|
0f 85/jump-if-!= break/disp32
|
||||||
# if (word-slice == '->') abort
|
# if (word-slice == '->') abort
|
||||||
(slice-equal? %ecx "->") # => eax
|
(slice-equal? %ecx "->") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32
|
0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
|
||||||
# if (word-slice == '}') abort
|
# if (word-slice == '}') abort
|
||||||
(slice-equal? %ecx "}") # => eax
|
(slice-equal? %ecx "}") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $populate-mu-function-header:error1/disp32
|
0f 85/jump-if-!= $populate-mu-function-header:error1/disp32
|
||||||
#
|
#
|
||||||
(parse-var-with-type %ecx *(ebp+8)) # => eax
|
(parse-var-with-type %ecx *(ebp+8)) # => eax
|
||||||
89/<- %ebx 0/r32/eax
|
89/<- %ebx 0/r32/eax
|
||||||
# assert(var->register != null)
|
# assert(var->register != null)
|
||||||
81 7/subop/compare *(ebx+0x10) 0/imm32 # Var-register
|
81 7/subop/compare *(ebx+0x10) 0/imm32 # Var-register
|
||||||
0f 84/jump-if-equal $populate-mu-function-header:error3/disp32
|
0f 84/jump-if-= $populate-mu-function-header:error3/disp32
|
||||||
(append-list Heap %ebx *(edi+0xc)) # Function-outputs => eax
|
(append-list Heap %ebx *(edi+0xc)) # Function-outputs => eax
|
||||||
89/<- *(edi+0xc) 0/r32/eax # Function-outputs
|
89/<- *(edi+0xc) 0/r32/eax # Function-outputs
|
||||||
e9/jump loop/disp32
|
e9/jump loop/disp32
|
||||||
|
@ -1522,7 +1522,7 @@ $parse-var-with-type:save-name:
|
||||||
8a/copy-byte *eax 3/r32/BL
|
8a/copy-byte *eax 3/r32/BL
|
||||||
81 4/subop/and %ebx 0xff/imm32
|
81 4/subop/and %ebx 0xff/imm32
|
||||||
81 7/subop/compare %ebx 0x3a/imm32/colon
|
81 7/subop/compare %ebx 0x3a/imm32/colon
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
89/<- *(ecx+4) 0/r32/eax
|
89/<- *(ecx+4) 0/r32/eax
|
||||||
}
|
}
|
||||||
# . if s ends with ',', decrement s->end
|
# . if s ends with ',', decrement s->end
|
||||||
|
@ -1532,7 +1532,7 @@ $parse-var-with-type:save-name:
|
||||||
8a/copy-byte *eax 3/r32/BL
|
8a/copy-byte *eax 3/r32/BL
|
||||||
81 4/subop/and %ebx 0xff/imm32
|
81 4/subop/and %ebx 0xff/imm32
|
||||||
81 7/subop/compare %ebx 0x2c/imm32/comma
|
81 7/subop/compare %ebx 0x2c/imm32/comma
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
89/<- *(ecx+4) 0/r32/eax
|
89/<- *(ecx+4) 0/r32/eax
|
||||||
}
|
}
|
||||||
$parse-var-with-type:write-name:
|
$parse-var-with-type:write-name:
|
||||||
|
@ -1548,7 +1548,7 @@ $parse-var-with-type:save-register:
|
||||||
8a/copy-byte *eax 3/r32/BL
|
8a/copy-byte *eax 3/r32/BL
|
||||||
81 4/subop/and %ebx 0xff/imm32
|
81 4/subop/and %ebx 0xff/imm32
|
||||||
81 7/subop/compare %ebx 0x3a/imm32/colon
|
81 7/subop/compare %ebx 0x3a/imm32/colon
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
89/<- *(ecx+4) 0/r32/eax
|
89/<- *(ecx+4) 0/r32/eax
|
||||||
}
|
}
|
||||||
# . if s ends with ',', decrement s->end
|
# . if s ends with ',', decrement s->end
|
||||||
|
@ -1558,7 +1558,7 @@ $parse-var-with-type:save-register:
|
||||||
8a/copy-byte *eax 3/r32/BL
|
8a/copy-byte *eax 3/r32/BL
|
||||||
81 4/subop/and %ebx 0xff/imm32
|
81 4/subop/and %ebx 0xff/imm32
|
||||||
81 7/subop/compare %ebx 0x2c/imm32/comma
|
81 7/subop/compare %ebx 0x2c/imm32/comma
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
89/<- *(ecx+4) 0/r32/eax
|
89/<- *(ecx+4) 0/r32/eax
|
||||||
}
|
}
|
||||||
# if (!slice-empty?(s)) v->register = slice-to-string(s)
|
# if (!slice-empty?(s)) v->register = slice-to-string(s)
|
||||||
|
@ -1568,7 +1568,7 @@ $parse-var-with-type:write-register:
|
||||||
# That's probably a sign we have the wrong algorithm for this function.
|
# That's probably a sign we have the wrong algorithm for this function.
|
||||||
8b/-> *ecx 0/r32/eax
|
8b/-> *ecx 0/r32/eax
|
||||||
39/compare 0/r32/eax *(ecx+4)
|
39/compare 0/r32/eax *(ecx+4)
|
||||||
76/jump-if-lesser-or-equal break/disp8
|
76/jump-if-<= break/disp8
|
||||||
(slice-to-string Heap %ecx)
|
(slice-to-string Heap %ecx)
|
||||||
89/<- *(edi+0x10) 0/r32/eax # Var-register
|
89/<- *(edi+0x10) 0/r32/eax # Var-register
|
||||||
}
|
}
|
||||||
|
@ -1577,33 +1577,33 @@ $parse-var-with-type:write-register:
|
||||||
# if (word-slice == '{') abort
|
# if (word-slice == '{') abort
|
||||||
(slice-equal? %ecx "{") # => eax
|
(slice-equal? %ecx "{") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32
|
0f 85/jump-if-!= $parse-var-with-type:abort/disp32
|
||||||
# if (word-slice == '->') abort
|
# if (word-slice == '->') abort
|
||||||
(slice-equal? %ecx "->") # => eax
|
(slice-equal? %ecx "->") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32
|
0f 85/jump-if-!= $parse-var-with-type:abort/disp32
|
||||||
# if (word-slice == '}') abort
|
# if (word-slice == '}') abort
|
||||||
(slice-equal? %ecx "}") # => eax
|
(slice-equal? %ecx "}") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32
|
0f 85/jump-if-!= $parse-var-with-type:abort/disp32
|
||||||
# if (slice-empty?(type)) skip
|
# if (slice-empty?(type)) skip
|
||||||
(slice-empty? %ecx)
|
(slice-empty? %ecx)
|
||||||
{
|
{
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 84/jump-if-equal break/disp32
|
0f 84/jump-if-= break/disp32
|
||||||
(next-mu-token *(ebp+0xc) %ecx)
|
(next-mu-token *(ebp+0xc) %ecx)
|
||||||
# if (word-slice == '{') abort
|
# if (word-slice == '{') abort
|
||||||
(slice-equal? %ecx "{") # => eax
|
(slice-equal? %ecx "{") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32
|
0f 85/jump-if-!= $parse-var-with-type:abort/disp32
|
||||||
# if (word-slice == '->') abort
|
# if (word-slice == '->') abort
|
||||||
(slice-equal? %ecx "->") # => eax
|
(slice-equal? %ecx "->") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32
|
0f 85/jump-if-!= $parse-var-with-type:abort/disp32
|
||||||
# if (word-slice == '}') abort
|
# if (word-slice == '}') abort
|
||||||
(slice-equal? %ecx "}") # => eax
|
(slice-equal? %ecx "}") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $parse-var-with-type:abort/disp32
|
0f 85/jump-if-!= $parse-var-with-type:abort/disp32
|
||||||
}
|
}
|
||||||
(type-for %ecx) # => eax
|
(type-for %ecx) # => eax
|
||||||
89/<- *(edi+4) 0/r32/eax # Var-type
|
89/<- *(edi+4) 0/r32/eax # Var-type
|
||||||
|
@ -1655,7 +1655,7 @@ next-mu-token: # in: (addr stream byte), out: (addr slice)
|
||||||
8a/copy-byte *eax 3/r32/BL
|
8a/copy-byte *eax 3/r32/BL
|
||||||
81 4/subop/and %ebx 0xff/imm32
|
81 4/subop/and %ebx 0xff/imm32
|
||||||
81 7/subop/compare %ebx 0x3a/imm32/colon
|
81 7/subop/compare %ebx 0x3a/imm32/colon
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
89/<- *(edi+4) 0/r32/eax
|
89/<- *(edi+4) 0/r32/eax
|
||||||
}
|
}
|
||||||
# if out ends with ',', decrement out->end
|
# if out ends with ',', decrement out->end
|
||||||
|
@ -1665,7 +1665,7 @@ next-mu-token: # in: (addr stream byte), out: (addr slice)
|
||||||
8a/copy-byte *eax 3/r32/BL
|
8a/copy-byte *eax 3/r32/BL
|
||||||
81 4/subop/and %ebx 0xff/imm32
|
81 4/subop/and %ebx 0xff/imm32
|
||||||
81 7/subop/compare %ebx 0x2c/imm32/comma
|
81 7/subop/compare %ebx 0x2c/imm32/comma
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
89/<- *(edi+4) 0/r32/eax
|
89/<- *(edi+4) 0/r32/eax
|
||||||
}
|
}
|
||||||
$next-mu-token:end:
|
$next-mu-token:end:
|
||||||
|
@ -1722,14 +1722,14 @@ pos-slice: # arr: (addr stream (handle array byte)), s: (addr slice) -> index/e
|
||||||
# if (curr >= max) return -1
|
# if (curr >= max) return -1
|
||||||
39/compare %edx 3/r32/ebx
|
39/compare %edx 3/r32/ebx
|
||||||
{
|
{
|
||||||
72/jump-if-lesser-unsigned break/disp8
|
72/jump-if-addr< break/disp8
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
eb/jump $pos-slice:end/disp8
|
eb/jump $pos-slice:end/disp8
|
||||||
}
|
}
|
||||||
# if (slice-equal?(s, *curr)) break
|
# if (slice-equal?(s, *curr)) break
|
||||||
(slice-equal? *(ebp+0xc) *edx) # => eax
|
(slice-equal? *(ebp+0xc) *edx) # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
# ++index
|
# ++index
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
# curr += 4
|
# curr += 4
|
||||||
|
@ -1901,7 +1901,7 @@ is-identifier?: # in : (addr slice) -> result/eax : boolean
|
||||||
# if (slice-empty?(in)) return false
|
# if (slice-empty?(in)) return false
|
||||||
(slice-empty? *(ebp+8)) # => eax
|
(slice-empty? *(ebp+8)) # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal $is-identifier?:false/disp8
|
75/jump-if-!= $is-identifier?:false/disp8
|
||||||
# var c/eax : byte = *in->start
|
# var c/eax : byte = *in->start
|
||||||
8b/-> *(ebp+8) 0/r32/eax
|
8b/-> *(ebp+8) 0/r32/eax
|
||||||
8b/-> *eax 0/r32/eax
|
8b/-> *eax 0/r32/eax
|
||||||
|
@ -1909,18 +1909,18 @@ is-identifier?: # in : (addr slice) -> result/eax : boolean
|
||||||
81 4/subop/and %eax 0xff/imm32
|
81 4/subop/and %eax 0xff/imm32
|
||||||
# if (c == '$') return true
|
# if (c == '$') return true
|
||||||
3d/compare-eax-and 0x24/imm32/$
|
3d/compare-eax-and 0x24/imm32/$
|
||||||
74/jump-if-equal $is-identifier?:true/disp8
|
74/jump-if-= $is-identifier?:true/disp8
|
||||||
# if (c == '_') return true
|
# if (c == '_') return true
|
||||||
3d/compare-eax-and 0x5f/imm32/_
|
3d/compare-eax-and 0x5f/imm32/_
|
||||||
74/jump-if-equal $is-identifier?:true/disp8
|
74/jump-if-= $is-identifier?:true/disp8
|
||||||
# drop case
|
# drop case
|
||||||
25/and-eax-with 0x5f/imm32
|
25/and-eax-with 0x5f/imm32
|
||||||
# if (c < 'A') return false
|
# if (c < 'A') return false
|
||||||
3d/compare-eax-and 0x41/imm32/A
|
3d/compare-eax-and 0x41/imm32/A
|
||||||
7c/jump-if-lesser $is-identifier?:false/disp8
|
7c/jump-if-< $is-identifier?:false/disp8
|
||||||
# if (c > 'Z') return false
|
# if (c > 'Z') return false
|
||||||
3d/compare-eax-and 0x5a/imm32/Z
|
3d/compare-eax-and 0x5a/imm32/Z
|
||||||
7f/jump-if-greater $is-identifier?:false/disp8
|
7f/jump-if-> $is-identifier?:false/disp8
|
||||||
# otherwise return true
|
# otherwise return true
|
||||||
$is-identifier?:true:
|
$is-identifier?:true:
|
||||||
b8/copy-to-eax 1/imm32/true
|
b8/copy-to-eax 1/imm32/true
|
||||||
|
@ -2282,7 +2282,7 @@ $parse-mu-block:line-loop:
|
||||||
#? (flush Stderr)
|
#? (flush Stderr)
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare *ecx 0/imm32
|
81 7/subop/compare *ecx 0/imm32
|
||||||
0f 84/jump-if-equal break/disp32
|
0f 84/jump-if-= break/disp32
|
||||||
# word-slice = next-word(line)
|
# word-slice = next-word(line)
|
||||||
(next-word %ecx %edx)
|
(next-word %ecx %edx)
|
||||||
#? (write-buffered Stderr "word: ")
|
#? (write-buffered Stderr "word: ")
|
||||||
|
@ -2292,7 +2292,7 @@ $parse-mu-block:line-loop:
|
||||||
# if slice-empty?(word-slice) continue
|
# if slice-empty?(word-slice) continue
|
||||||
(slice-empty? %edx)
|
(slice-empty? %edx)
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal loop/disp32
|
0f 85/jump-if-!= loop/disp32
|
||||||
# if (slice-starts-with?(word-slice, '#') continue
|
# if (slice-starts-with?(word-slice, '#') continue
|
||||||
# . eax = *word-slice->start
|
# . eax = *word-slice->start
|
||||||
8b/-> *edx 0/r32/eax
|
8b/-> *edx 0/r32/eax
|
||||||
|
@ -2300,13 +2300,13 @@ $parse-mu-block:line-loop:
|
||||||
81 4/subop/and %eax 0xff/imm32
|
81 4/subop/and %eax 0xff/imm32
|
||||||
# . if (eax == '#') continue
|
# . if (eax == '#') continue
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal loop/disp32
|
0f 84/jump-if-= loop/disp32
|
||||||
# if slice-equal?(word-slice, "{")
|
# if slice-equal?(word-slice, "{")
|
||||||
{
|
{
|
||||||
$parse-mu-block:check-for-block:
|
$parse-mu-block:check-for-block:
|
||||||
(slice-equal? %edx "{")
|
(slice-equal? %edx "{")
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
(check-no-tokens-left %ecx)
|
(check-no-tokens-left %ecx)
|
||||||
# parse new block and append
|
# parse new block and append
|
||||||
(parse-mu-block *(ebp+8) *(ebp+0xc) *(ebp+0x10)) # => eax
|
(parse-mu-block *(ebp+8) *(ebp+0xc) *(ebp+0x10)) # => eax
|
||||||
|
@ -2317,7 +2317,7 @@ $parse-mu-block:check-for-block:
|
||||||
$parse-mu-block:check-for-end:
|
$parse-mu-block:check-for-end:
|
||||||
(slice-equal? %edx "}")
|
(slice-equal? %edx "}")
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal break/disp32
|
0f 85/jump-if-!= break/disp32
|
||||||
# if slice-ends-with?(word-slice, ":") parse named block and append
|
# if slice-ends-with?(word-slice, ":") parse named block and append
|
||||||
{
|
{
|
||||||
$parse-mu-block:check-for-named-block:
|
$parse-mu-block:check-for-named-block:
|
||||||
|
@ -2327,7 +2327,7 @@ $parse-mu-block:check-for-named-block:
|
||||||
81 4/subop/and %eax 0xff/imm32
|
81 4/subop/and %eax 0xff/imm32
|
||||||
# . if (eax != ':') break
|
# . if (eax != ':') break
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 85/jump-if-not-equal break/disp32
|
0f 85/jump-if-!= break/disp32
|
||||||
#
|
#
|
||||||
(parse-mu-named-block %edx %ecx *(ebp+8) *(ebp+0xc) *(ebp+0x10)) # => eax
|
(parse-mu-named-block %edx %ecx *(ebp+8) *(ebp+0xc) *(ebp+0x10)) # => eax
|
||||||
(append-to-block %edi %eax)
|
(append-to-block %edi %eax)
|
||||||
|
@ -2338,7 +2338,7 @@ $parse-mu-block:check-for-named-block:
|
||||||
$parse-mu-block:check-for-var:
|
$parse-mu-block:check-for-var:
|
||||||
(slice-equal? %edx "var")
|
(slice-equal? %edx "var")
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
#
|
#
|
||||||
(parse-mu-var-def %ecx *(ebp+0xc)) # => eax
|
(parse-mu-var-def %ecx *(ebp+0xc)) # => eax
|
||||||
(append-to-block %edi %eax)
|
(append-to-block %edi %eax)
|
||||||
|
@ -2394,7 +2394,7 @@ check-no-tokens-left: # line : (addr stream byte)
|
||||||
# if slice-empty?(s) return
|
# if slice-empty?(s) return
|
||||||
(slice-empty? %ecx)
|
(slice-empty? %ecx)
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal $check-no-tokens-left:end/disp8
|
75/jump-if-!= $check-no-tokens-left:end/disp8
|
||||||
# if (slice-starts-with?(s, '#') return
|
# if (slice-starts-with?(s, '#') return
|
||||||
# . eax = *s->start
|
# . eax = *s->start
|
||||||
8b/-> *edx 0/r32/eax
|
8b/-> *edx 0/r32/eax
|
||||||
|
@ -2402,7 +2402,7 @@ check-no-tokens-left: # line : (addr stream byte)
|
||||||
81 4/subop/and %eax 0xff/imm32
|
81 4/subop/and %eax 0xff/imm32
|
||||||
# . if (eax == '#') continue
|
# . if (eax == '#') continue
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
74/jump-if-equal $check-no-tokens-left:end/disp8
|
74/jump-if-= $check-no-tokens-left:end/disp8
|
||||||
# abort
|
# abort
|
||||||
(write-buffered Stderr "'{' or '}' should be on its own line, but got '")
|
(write-buffered Stderr "'{' or '}' should be on its own line, but got '")
|
||||||
(rewind-stream %ecx)
|
(rewind-stream %ecx)
|
||||||
|
@ -2520,7 +2520,7 @@ parse-mu-stmt: # line : (addr stream byte), vars : (addr stack (handle var)), f
|
||||||
{
|
{
|
||||||
(stmt-has-outputs? *(ebp+8))
|
(stmt-has-outputs? *(ebp+8))
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 84/jump-if-equal break/disp32
|
0f 84/jump-if-= break/disp32
|
||||||
{
|
{
|
||||||
$parse-mu-stmt:read-outputs:
|
$parse-mu-stmt:read-outputs:
|
||||||
# name = next-word(line)
|
# name = next-word(line)
|
||||||
|
@ -2528,15 +2528,15 @@ $parse-mu-stmt:read-outputs:
|
||||||
# if slice-empty?(word-slice) break
|
# if slice-empty?(word-slice) break
|
||||||
(slice-empty? %ecx)
|
(slice-empty? %ecx)
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal break/disp32
|
0f 85/jump-if-!= break/disp32
|
||||||
# if (name == "<-") break
|
# if (name == "<-") break
|
||||||
(slice-equal? %ecx "<-")
|
(slice-equal? %ecx "<-")
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
# assert(is-identifier?(name))
|
# assert(is-identifier?(name))
|
||||||
(is-identifier? %ecx)
|
(is-identifier? %ecx)
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 84/jump-if-equal $parse-mu-stmt:abort/disp32
|
0f 84/jump-if-= $parse-mu-stmt:abort/disp32
|
||||||
#
|
#
|
||||||
(lookup-or-define-var %ecx *(ebp+0xc) *(ebp+0x10)) # => eax
|
(lookup-or-define-var %ecx *(ebp+0xc) *(ebp+0x10)) # => eax
|
||||||
(append-list Heap %eax *(edi+0xc)) # Stmt1-outputs => eax
|
(append-list Heap %eax *(edi+0xc)) # Stmt1-outputs => eax
|
||||||
|
@ -2555,11 +2555,11 @@ $parse-mu-stmt:read-inouts:
|
||||||
# if slice-empty?(word-slice) break
|
# if slice-empty?(word-slice) break
|
||||||
(slice-empty? %ecx)
|
(slice-empty? %ecx)
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal break/disp32
|
0f 85/jump-if-!= break/disp32
|
||||||
# if (name == "<-") abort
|
# if (name == "<-") abort
|
||||||
(slice-equal? %ecx "<-")
|
(slice-equal? %ecx "<-")
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $parse-mu-stmt:abort2/disp32
|
0f 85/jump-if-!= $parse-mu-stmt:abort2/disp32
|
||||||
#
|
#
|
||||||
(lookup-var-or-literal %ecx *(ebp+0xc)) # => eax
|
(lookup-var-or-literal %ecx *(ebp+0xc)) # => eax
|
||||||
(append-list Heap %eax *(edi+8)) # Stmt1-inouts => eax
|
(append-list Heap %eax *(edi+8)) # Stmt1-inouts => eax
|
||||||
|
@ -2623,7 +2623,7 @@ stmt-has-outputs?: # line : (addr stream byte) -> result/eax : boolean
|
||||||
(slice-empty? %ecx)
|
(slice-empty? %ecx)
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
b8/copy-to-eax 0/imm32/false/result # restore result (if we're here it's still false)
|
b8/copy-to-eax 0/imm32/false/result # restore result (if we're here it's still false)
|
||||||
0f 85/jump-if-not-equal break/disp32
|
0f 85/jump-if-!= break/disp32
|
||||||
# if slice-starts-with?(word-slice, '#') break
|
# if slice-starts-with?(word-slice, '#') break
|
||||||
# . eax = *word-slice->start
|
# . eax = *word-slice->start
|
||||||
8b/-> *ecx 0/r32/eax
|
8b/-> *ecx 0/r32/eax
|
||||||
|
@ -2632,11 +2632,11 @@ stmt-has-outputs?: # line : (addr stream byte) -> result/eax : boolean
|
||||||
# . if (eax == '#') break
|
# . if (eax == '#') break
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
b8/copy-to-eax 0/imm32/false/result # restore result (if we're here it's still false)
|
b8/copy-to-eax 0/imm32/false/result # restore result (if we're here it's still false)
|
||||||
0f 84/jump-if-equal break/disp32
|
0f 84/jump-if-= break/disp32
|
||||||
# if slice-equal?(word-slice, '<-') return true
|
# if slice-equal?(word-slice, '<-') return true
|
||||||
(slice-equal? %ecx "<-")
|
(slice-equal? %ecx "<-")
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal loop/disp8
|
74/jump-if-= loop/disp8
|
||||||
b8/copy-to-eax 1/imm32/true
|
b8/copy-to-eax 1/imm32/true
|
||||||
}
|
}
|
||||||
$stmt-has-outputs:end:
|
$stmt-has-outputs:end:
|
||||||
|
@ -2664,7 +2664,7 @@ lookup-var-or-literal: # name: (addr slice), vars : (addr stack (handle var)) -
|
||||||
# if slice-empty?(name) abort
|
# if slice-empty?(name) abort
|
||||||
(slice-empty? %esi) # => eax
|
(slice-empty? %esi) # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $lookup-var-or-literal:abort/disp32
|
0f 85/jump-if-!= $lookup-var-or-literal:abort/disp32
|
||||||
# var ecx : byte = *name->start
|
# var ecx : byte = *name->start
|
||||||
8b/-> *esi 1/r32/ecx
|
8b/-> *esi 1/r32/ecx
|
||||||
8a/copy-byte *ecx 1/r32/CL
|
8a/copy-byte *ecx 1/r32/CL
|
||||||
|
@ -2673,12 +2673,12 @@ lookup-var-or-literal: # name: (addr slice), vars : (addr stack (handle var)) -
|
||||||
(is-decimal-digit? %ecx) # => eax
|
(is-decimal-digit? %ecx) # => eax
|
||||||
81 7/subop/compare %eax 0/imm32
|
81 7/subop/compare %eax 0/imm32
|
||||||
{
|
{
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
(new-literal-integer Heap %esi) # => eax
|
(new-literal-integer Heap %esi) # => eax
|
||||||
}
|
}
|
||||||
# otherwise return lookup-var(name, vars)
|
# otherwise return lookup-var(name, vars)
|
||||||
{
|
{
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
(lookup-var %esi *(ebp+0xc)) # => eax
|
(lookup-var %esi *(ebp+0xc)) # => eax
|
||||||
}
|
}
|
||||||
$lookup-var-or-literal:end:
|
$lookup-var-or-literal:end:
|
||||||
|
@ -2710,7 +2710,7 @@ lookup-var: # name: (addr slice), vars : (addr stack (handle var)) -> result/ea
|
||||||
(lookup-var-helper %eax *(ebp+0xc)) # => eax
|
(lookup-var-helper %eax *(ebp+0xc)) # => eax
|
||||||
# if (result == 0) abort
|
# if (result == 0) abort
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $lookup-var:abort/disp8
|
74/jump-if-= $lookup-var:abort/disp8
|
||||||
$lookup-var:end:
|
$lookup-var:end:
|
||||||
# . epilogue
|
# . epilogue
|
||||||
89/<- %esp 5/r32/ebp
|
89/<- %esp 5/r32/ebp
|
||||||
|
@ -2752,7 +2752,7 @@ lookup-var-helper: # name: (addr array byte), vars : (addr stack (handle var))
|
||||||
8b/-> *esi 3/r32/ebx
|
8b/-> *esi 3/r32/ebx
|
||||||
# if (vars->top > vars->length) abort
|
# if (vars->top > vars->length) abort
|
||||||
3b/compare 0/r32/eax *(esi+4)
|
3b/compare 0/r32/eax *(esi+4)
|
||||||
0f 8f/jump-if-greater $lookup-var-helper:error1/disp32
|
0f 8f/jump-if-> $lookup-var-helper:error1/disp32
|
||||||
# var min/edx : (addr handle var) = vars->data
|
# var min/edx : (addr handle var) = vars->data
|
||||||
8d/copy-address *(esi+8) 2/r32/edx
|
8d/copy-address *(esi+8) 2/r32/edx
|
||||||
# var curr/ebx : (addr handle var) = &vars->data[vars->top - 4]
|
# var curr/ebx : (addr handle var) = &vars->data[vars->top - 4]
|
||||||
|
@ -2762,14 +2762,14 @@ lookup-var-helper: # name: (addr array byte), vars : (addr stack (handle var))
|
||||||
# if (curr < min) return 0
|
# if (curr < min) return 0
|
||||||
39/compare %ebx 2/r32/edx
|
39/compare %ebx 2/r32/edx
|
||||||
b8/copy-to-eax 0/imm32
|
b8/copy-to-eax 0/imm32
|
||||||
0f 82/jump-if-lesser-unsigned break/disp32
|
0f 82/jump-if-addr< break/disp32
|
||||||
# var v/eax : (handle var) = *curr
|
# var v/eax : (handle var) = *curr
|
||||||
8b/-> *ebx 0/r32/eax
|
8b/-> *ebx 0/r32/eax
|
||||||
# if (v->name == name) return v
|
# if (v->name == name) return v
|
||||||
(string-equal? *eax *(ebp+8)) # Var-name
|
(string-equal? *eax *(ebp+8)) # Var-name
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
8b/-> *ebx 0/r32/eax
|
8b/-> *ebx 0/r32/eax
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
# curr -= 4
|
# curr -= 4
|
||||||
81 5/subop/subtract %ebx 4/imm32
|
81 5/subop/subtract %ebx 4/imm32
|
||||||
e9/jump loop/disp32
|
e9/jump loop/disp32
|
||||||
|
@ -2810,13 +2810,13 @@ lookup-or-define-var: # name: (addr slice), vars : (addr stack (handle var)), f
|
||||||
{
|
{
|
||||||
# if (result != 0) return
|
# if (result != 0) return
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
# if name is one of fn's outputs, return it
|
# if name is one of fn's outputs, return it
|
||||||
{
|
{
|
||||||
(find-in-function-outputs *(ebp+0x10) %ecx) # => eax
|
(find-in-function-outputs *(ebp+0x10) %ecx) # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
# otherwise abort
|
# otherwise abort
|
||||||
0f 84/jump-if-not-equal $lookup-var:abort/disp32
|
0f 84/jump-if-!= $lookup-var:abort/disp32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$lookup-or-define-var:end:
|
$lookup-or-define-var:end:
|
||||||
|
@ -2839,7 +2839,7 @@ find-in-function-outputs: # fn : (handle function), name : (handle array byte)
|
||||||
# while curr != null
|
# while curr != null
|
||||||
{
|
{
|
||||||
81 7/subop/compare %ecx 0/imm32
|
81 7/subop/compare %ecx 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
# var v : (handle var) = *curr
|
# var v : (handle var) = *curr
|
||||||
8b/-> *ecx 0/r32/eax # List-value
|
8b/-> *ecx 0/r32/eax # List-value
|
||||||
# if (curr->name == name) return curr
|
# if (curr->name == name) return curr
|
||||||
|
@ -2847,7 +2847,7 @@ find-in-function-outputs: # fn : (handle function), name : (handle array byte)
|
||||||
(string-equal? *eax *(ebp+0xc))
|
(string-equal? *eax *(ebp+0xc))
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
58/pop-to-eax
|
58/pop-to-eax
|
||||||
75/jump-if-not-equal $find-in-function-outputs:end/disp8
|
75/jump-if-!= $find-in-function-outputs:end/disp8
|
||||||
# curr = curr->next
|
# curr = curr->next
|
||||||
8b/-> *(ecx+4) 1/r32/ecx # List-next
|
8b/-> *(ecx+4) 1/r32/ecx # List-next
|
||||||
eb/jump loop/disp8
|
eb/jump loop/disp8
|
||||||
|
@ -2960,7 +2960,7 @@ new-literal-integer: # ad: (addr allocation-descriptor), name: (addr slice) ->
|
||||||
# if (!is-hex-int?(name)) abort
|
# if (!is-hex-int?(name)) abort
|
||||||
(is-hex-int? *(ebp+0xc)) # => eax
|
(is-hex-int? *(ebp+0xc)) # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 84/jump-if-equal $new-literal-integer:abort/disp32
|
0f 84/jump-if-= $new-literal-integer:abort/disp32
|
||||||
# var s/ecx : (addr array byte)
|
# var s/ecx : (addr array byte)
|
||||||
(slice-to-string Heap *(ebp+0xc)) # => eax
|
(slice-to-string Heap *(ebp+0xc)) # => eax
|
||||||
89/<- %ecx 0/r32/eax
|
89/<- %ecx 0/r32/eax
|
||||||
|
@ -3137,14 +3137,14 @@ append-list: # ad: (addr allocation-descriptor), value: _type, list: (handle li
|
||||||
89/<- *eax 1/r32/ecx # List-value
|
89/<- *eax 1/r32/ecx # List-value
|
||||||
# if (list == null) return result
|
# if (list == null) return result
|
||||||
81 7/subop/compare *(ebp+0x10) 0/imm32
|
81 7/subop/compare *(ebp+0x10) 0/imm32
|
||||||
74/jump-if-equal $new-list:end/disp8
|
74/jump-if-= $new-list:end/disp8
|
||||||
# otherwise append
|
# otherwise append
|
||||||
# var curr/ecx = list
|
# var curr/ecx = list
|
||||||
8b/-> *(ebp+0x10) 1/r32/ecx
|
8b/-> *(ebp+0x10) 1/r32/ecx
|
||||||
# while (curr->next != null) curr = curr->next
|
# while (curr->next != null) curr = curr->next
|
||||||
{
|
{
|
||||||
81 7/subop/compare *(ecx+4) 0/imm32 # List-next
|
81 7/subop/compare *(ecx+4) 0/imm32 # List-next
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
# curr = curr->next
|
# curr = curr->next
|
||||||
8b/-> *(ecx+4) 1/r32/ecx
|
8b/-> *(ecx+4) 1/r32/ecx
|
||||||
eb/jump loop/disp8
|
eb/jump loop/disp8
|
||||||
|
@ -3225,7 +3225,7 @@ emit-subx: # out : (addr buffered-file)
|
||||||
{
|
{
|
||||||
# if (curr == null) break
|
# if (curr == null) break
|
||||||
81 7/subop/compare %ecx 0/imm32
|
81 7/subop/compare %ecx 0/imm32
|
||||||
0f 84/jump-if-equal break/disp32
|
0f 84/jump-if-= break/disp32
|
||||||
(emit-subx-function %edi %ecx)
|
(emit-subx-function %edi %ecx)
|
||||||
# curr = curr->next
|
# curr = curr->next
|
||||||
8b/-> *(ecx+0x14) 1/r32/ecx # Function-next
|
8b/-> *(ecx+0x14) 1/r32/ecx # Function-next
|
||||||
|
@ -3280,12 +3280,12 @@ emit-subx-block: # out : (addr buffered-file), block : (handle block)
|
||||||
{
|
{
|
||||||
$emit-subx-block:check-empty:
|
$emit-subx-block:check-empty:
|
||||||
81 7/subop/compare %esi 0/imm32
|
81 7/subop/compare %esi 0/imm32
|
||||||
0f 84/jump-if-equal break/disp32
|
0f 84/jump-if-= break/disp32
|
||||||
(write-buffered *(ebp+8) "{\n")
|
(write-buffered *(ebp+8) "{\n")
|
||||||
{
|
{
|
||||||
$emit-subx-block:stmt:
|
$emit-subx-block:stmt:
|
||||||
81 7/subop/compare %esi 0/imm32
|
81 7/subop/compare %esi 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
(emit-subx-statement *(ebp+8) *esi Primitives *Program)
|
(emit-subx-statement *(ebp+8) *esi Primitives *Program)
|
||||||
(write-buffered *(ebp+8) Newline)
|
(write-buffered *(ebp+8) Newline)
|
||||||
8b/-> *(esi+4) 6/r32/esi # List-next
|
8b/-> *(esi+4) 6/r32/esi # List-next
|
||||||
|
@ -3311,7 +3311,7 @@ emit-subx-statement: # out : (addr buffered-file), stmt : (handle statement), p
|
||||||
$emit-subx-statement:primitive:
|
$emit-subx-statement:primitive:
|
||||||
(find-matching-primitive *(ebp+0x10) *(ebp+0xc)) # primitives, stmt => curr/eax
|
(find-matching-primitive *(ebp+0x10) *(ebp+0xc)) # primitives, stmt => curr/eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
(emit-subx-primitive *(ebp+8) *(ebp+0xc) %eax) # out, stmt, curr
|
(emit-subx-primitive *(ebp+8) *(ebp+0xc) %eax) # out, stmt, curr
|
||||||
e9/jump $emit-subx-statement:end/disp32
|
e9/jump $emit-subx-statement:end/disp32
|
||||||
}
|
}
|
||||||
|
@ -3320,7 +3320,7 @@ $emit-subx-statement:primitive:
|
||||||
$emit-subx-statement:call:
|
$emit-subx-statement:call:
|
||||||
(find-matching-function *(ebp+0x14) *(ebp+0xc)) # functions, stmt => curr/eax
|
(find-matching-function *(ebp+0x14) *(ebp+0xc)) # functions, stmt => curr/eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
(emit-subx-call *(ebp+8) *(ebp+0xc) %eax) # out, stmt, curr
|
(emit-subx-call *(ebp+8) *(ebp+0xc) %eax) # out, stmt, curr
|
||||||
e9/jump $emit-subx-statement:end/disp32
|
e9/jump $emit-subx-statement:end/disp32
|
||||||
}
|
}
|
||||||
|
@ -4136,7 +4136,7 @@ emit-subx-rm32: # out : (addr buffered-file), l : arg-location, stmt : (handle
|
||||||
50/push-eax
|
50/push-eax
|
||||||
# if (l == 0) return
|
# if (l == 0) return
|
||||||
81 7/subop/compare *(ebp+0xc) 0/imm32
|
81 7/subop/compare *(ebp+0xc) 0/imm32
|
||||||
74/jump-if-equal $emit-subx-rm32:end/disp8
|
74/jump-if-= $emit-subx-rm32:end/disp8
|
||||||
#
|
#
|
||||||
(get-stmt-operand-from-arg-location *(ebp+0x10) *(ebp+0xc)) # stmt, l => var/eax
|
(get-stmt-operand-from-arg-location *(ebp+0x10) *(ebp+0xc)) # stmt, l => var/eax
|
||||||
(emit-subx-var-as-rm32 *(ebp+8) %eax) # out, var
|
(emit-subx-var-as-rm32 *(ebp+8) %eax) # out, var
|
||||||
|
@ -4161,7 +4161,7 @@ get-stmt-operand-from-arg-location: # stmt : (handle statement), l : arg-locati
|
||||||
# if (l == 1) return stmt->inouts->var
|
# if (l == 1) return stmt->inouts->var
|
||||||
{
|
{
|
||||||
3d/compare-eax-and 1/imm32
|
3d/compare-eax-and 1/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
$get-stmt-operand-from-arg-location:1:
|
$get-stmt-operand-from-arg-location:1:
|
||||||
8b/-> *(ecx+8) 0/r32/eax # Stmt1-inouts
|
8b/-> *(ecx+8) 0/r32/eax # Stmt1-inouts
|
||||||
8b/-> *eax 0/r32/eax # Operand-var
|
8b/-> *eax 0/r32/eax # Operand-var
|
||||||
|
@ -4170,7 +4170,7 @@ $get-stmt-operand-from-arg-location:1:
|
||||||
# if (l == 2) return stmt->inouts->next->var
|
# if (l == 2) return stmt->inouts->next->var
|
||||||
{
|
{
|
||||||
3d/compare-eax-and 2/imm32
|
3d/compare-eax-and 2/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
$get-stmt-operand-from-arg-location:2:
|
$get-stmt-operand-from-arg-location:2:
|
||||||
8b/-> *(ecx+8) 0/r32/eax # Stmt1-inouts
|
8b/-> *(ecx+8) 0/r32/eax # Stmt1-inouts
|
||||||
8b/-> *(eax+4) 0/r32/eax # Operand-next
|
8b/-> *(eax+4) 0/r32/eax # Operand-next
|
||||||
|
@ -4180,7 +4180,7 @@ $get-stmt-operand-from-arg-location:2:
|
||||||
# if (l == 3) return stmt->outputs
|
# if (l == 3) return stmt->outputs
|
||||||
{
|
{
|
||||||
3d/compare-eax-and 3/imm32
|
3d/compare-eax-and 3/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
$get-stmt-operand-from-arg-location:3:
|
$get-stmt-operand-from-arg-location:3:
|
||||||
8b/-> *(ecx+0xc) 0/r32/eax # Stmt1-outputs
|
8b/-> *(ecx+0xc) 0/r32/eax # Stmt1-outputs
|
||||||
8b/-> *eax 0/r32/eax # Operand-var
|
8b/-> *eax 0/r32/eax # Operand-var
|
||||||
|
@ -4217,7 +4217,7 @@ emit-subx-r32: # out : (addr buffered-file), l : arg-location, stmt : (handle s
|
||||||
51/push-ecx
|
51/push-ecx
|
||||||
# if (location == 0) return
|
# if (location == 0) return
|
||||||
81 7/subop/compare *(ebp+0xc) 0/imm32
|
81 7/subop/compare *(ebp+0xc) 0/imm32
|
||||||
0f 84/jump-if-equal $emit-subx-r32:end/disp32
|
0f 84/jump-if-= $emit-subx-r32:end/disp32
|
||||||
#
|
#
|
||||||
(get-stmt-operand-from-arg-location *(ebp+0x10) *(ebp+0xc)) # stmt, l => var/eax
|
(get-stmt-operand-from-arg-location *(ebp+0x10) *(ebp+0xc)) # stmt, l => var/eax
|
||||||
(maybe-get Registers *(eax+0x10) 8) # Var-register => eax : (addr register-index)
|
(maybe-get Registers *(eax+0x10) 8) # Var-register => eax : (addr register-index)
|
||||||
|
@ -4242,7 +4242,7 @@ emit-subx-imm32: # out : (addr buffered-file), l : arg-location, stmt : (handle
|
||||||
51/push-ecx
|
51/push-ecx
|
||||||
# if (location == 0) return
|
# if (location == 0) return
|
||||||
81 7/subop/compare *(ebp+0xc) 0/imm32
|
81 7/subop/compare *(ebp+0xc) 0/imm32
|
||||||
74/jump-if-equal $emit-subx-imm32:end/disp8
|
74/jump-if-= $emit-subx-imm32:end/disp8
|
||||||
#
|
#
|
||||||
(get-stmt-operand-from-arg-location *(ebp+0x10) *(ebp+0xc)) # stmt, l => var/eax
|
(get-stmt-operand-from-arg-location *(ebp+0x10) *(ebp+0xc)) # stmt, l => var/eax
|
||||||
(write-buffered *(ebp+8) Space)
|
(write-buffered *(ebp+8) Space)
|
||||||
|
@ -4276,7 +4276,7 @@ emit-subx-call: # out : (addr buffered-file), stmt : (handle statement), callee
|
||||||
{
|
{
|
||||||
# if (curr == null) break
|
# if (curr == null) break
|
||||||
81 7/subop/compare %ecx 0/imm32
|
81 7/subop/compare %ecx 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
#
|
#
|
||||||
(emit-subx-call-operand *(ebp+8) *ecx)
|
(emit-subx-call-operand *(ebp+8) *ecx)
|
||||||
# curr = curr->next
|
# curr = curr->next
|
||||||
|
@ -4305,7 +4305,7 @@ emit-subx-call-operand: # out : (addr buffered-file), operand : (handle variabl
|
||||||
# if (operand->register) emit "%__"
|
# if (operand->register) emit "%__"
|
||||||
{
|
{
|
||||||
81 7/subop/compare *(eax+0x10) 0/imm32 # Var-register
|
81 7/subop/compare *(eax+0x10) 0/imm32 # Var-register
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
$emit-subx-call-operand:register:
|
$emit-subx-call-operand:register:
|
||||||
(write-buffered *(ebp+8) " %")
|
(write-buffered *(ebp+8) " %")
|
||||||
(write-buffered *(ebp+8) *(eax+0x10)) # Var-register
|
(write-buffered *(ebp+8) *(eax+0x10)) # Var-register
|
||||||
|
@ -4314,7 +4314,7 @@ $emit-subx-call-operand:register:
|
||||||
# else if (operand->stack-offset) emit "*(ebp+__)"
|
# else if (operand->stack-offset) emit "*(ebp+__)"
|
||||||
{
|
{
|
||||||
81 7/subop/compare *(eax+0xc) 0/imm32 # Var-stack-offset
|
81 7/subop/compare *(eax+0xc) 0/imm32 # Var-stack-offset
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
$emit-subx-call-operand:stack:
|
$emit-subx-call-operand:stack:
|
||||||
(write-buffered *(ebp+8) Space)
|
(write-buffered *(ebp+8) Space)
|
||||||
(write-buffered *(ebp+8) "*(ebp+")
|
(write-buffered *(ebp+8) "*(ebp+")
|
||||||
|
@ -4329,7 +4329,7 @@ $emit-subx-call-operand:stack:
|
||||||
8b/-> *(eax+4) 0/r32/eax # Var-type
|
8b/-> *(eax+4) 0/r32/eax # Var-type
|
||||||
81 7/subop/compare *eax 0/imm32 # Tree-left
|
81 7/subop/compare *eax 0/imm32 # Tree-left
|
||||||
58/pop-to-eax
|
58/pop-to-eax
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
$emit-subx-call-operand:literal:
|
$emit-subx-call-operand:literal:
|
||||||
(write-buffered *(ebp+8) Space)
|
(write-buffered *(ebp+8) Space)
|
||||||
(write-buffered *(ebp+8) *eax)
|
(write-buffered *(ebp+8) *eax)
|
||||||
|
@ -4353,7 +4353,7 @@ emit-subx-var-as-rm32: # out : (addr buffered-file), operand : (handle variable
|
||||||
# if (operand->register) emit "%__"
|
# if (operand->register) emit "%__"
|
||||||
{
|
{
|
||||||
81 7/subop/compare *(eax+0x10) 0/imm32 # Var-register
|
81 7/subop/compare *(eax+0x10) 0/imm32 # Var-register
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
$emit-subx-var-as-rm32:register:
|
$emit-subx-var-as-rm32:register:
|
||||||
(write-buffered *(ebp+8) " %")
|
(write-buffered *(ebp+8) " %")
|
||||||
(write-buffered *(ebp+8) *(eax+0x10)) # Var-register
|
(write-buffered *(ebp+8) *(eax+0x10)) # Var-register
|
||||||
|
@ -4361,7 +4361,7 @@ $emit-subx-var-as-rm32:register:
|
||||||
# else if (operand->stack-offset) emit "*(ebp+__)"
|
# else if (operand->stack-offset) emit "*(ebp+__)"
|
||||||
{
|
{
|
||||||
81 7/subop/compare *(eax+0xc) 0/imm32 # Var-stack-offset
|
81 7/subop/compare *(eax+0xc) 0/imm32 # Var-stack-offset
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
$emit-subx-var-as-rm32:stack:
|
$emit-subx-var-as-rm32:stack:
|
||||||
(write-buffered *(ebp+8) Space)
|
(write-buffered *(ebp+8) Space)
|
||||||
(write-buffered *(ebp+8) "*(ebp+")
|
(write-buffered *(ebp+8) "*(ebp+")
|
||||||
|
@ -4388,12 +4388,12 @@ find-matching-function: # functions : (addr function), stmt : (handle statement
|
||||||
{
|
{
|
||||||
# if (curr == null) break
|
# if (curr == null) break
|
||||||
81 7/subop/compare %ecx 0/imm32
|
81 7/subop/compare %ecx 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
# if match(stmt, curr) return curr
|
# if match(stmt, curr) return curr
|
||||||
{
|
{
|
||||||
(mu-stmt-matches-function? *(ebp+0xc) %ecx) # => eax
|
(mu-stmt-matches-function? *(ebp+0xc) %ecx) # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
89/<- %eax 1/r32/ecx
|
89/<- %eax 1/r32/ecx
|
||||||
eb/jump $find-matching-function:end/disp8
|
eb/jump $find-matching-function:end/disp8
|
||||||
}
|
}
|
||||||
|
@ -4423,7 +4423,7 @@ find-matching-primitive: # primitives : (handle primitive), stmt : (handle stat
|
||||||
$find-matching-primitive:loop:
|
$find-matching-primitive:loop:
|
||||||
# if (curr == null) break
|
# if (curr == null) break
|
||||||
81 7/subop/compare %ecx 0/imm32
|
81 7/subop/compare %ecx 0/imm32
|
||||||
0f 84/jump-if-equal break/disp32
|
0f 84/jump-if-= break/disp32
|
||||||
#? (write-buffered Stderr "prim: ")
|
#? (write-buffered Stderr "prim: ")
|
||||||
#? (write-buffered Stderr *ecx) # Primitive-name
|
#? (write-buffered Stderr *ecx) # Primitive-name
|
||||||
#? (write-buffered Stderr " => ")
|
#? (write-buffered Stderr " => ")
|
||||||
|
@ -4434,7 +4434,7 @@ $find-matching-primitive:loop:
|
||||||
{
|
{
|
||||||
(mu-stmt-matches-primitive? *(ebp+0xc) %ecx) # => eax
|
(mu-stmt-matches-primitive? *(ebp+0xc) %ecx) # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
89/<- %eax 1/r32/ecx
|
89/<- %eax 1/r32/ecx
|
||||||
eb/jump $find-matching-primitive:end/disp8
|
eb/jump $find-matching-primitive:end/disp8
|
||||||
}
|
}
|
||||||
|
@ -4495,7 +4495,7 @@ $mu-stmt-matches-primitive?:check-name:
|
||||||
# if (primitive->name != stmt->operation) return false
|
# if (primitive->name != stmt->operation) return false
|
||||||
(string-equal? *(ecx+4) *edx) # Stmt1-operation, Primitive-name => eax
|
(string-equal? *(ecx+4) *edx) # Stmt1-operation, Primitive-name => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
b8/copy-to-eax 0/imm32
|
b8/copy-to-eax 0/imm32
|
||||||
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
||||||
}
|
}
|
||||||
|
@ -4507,11 +4507,11 @@ $mu-stmt-matches-primitive?:check-inouts:
|
||||||
# if (curr == 0 && curr2 == 0) move on to check outputs
|
# if (curr == 0 && curr2 == 0) move on to check outputs
|
||||||
{
|
{
|
||||||
81 7/subop/compare %esi 0/imm32
|
81 7/subop/compare %esi 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
$mu-stmt-matches-primitive?:stmt-inout-is-null:
|
$mu-stmt-matches-primitive?:stmt-inout-is-null:
|
||||||
{
|
{
|
||||||
81 7/subop/compare %edi 0/imm32
|
81 7/subop/compare %edi 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
#
|
#
|
||||||
e9/jump $mu-stmt-matches-primitive?:check-outputs/disp32
|
e9/jump $mu-stmt-matches-primitive?:check-outputs/disp32
|
||||||
}
|
}
|
||||||
|
@ -4522,7 +4522,7 @@ $mu-stmt-matches-primitive?:stmt-inout-is-null:
|
||||||
# if (curr2 == 0) return false
|
# if (curr2 == 0) return false
|
||||||
{
|
{
|
||||||
81 7/subop/compare %edi 0/imm32
|
81 7/subop/compare %edi 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
$mu-stmt-matches-primitive?:prim-inout-is-null:
|
$mu-stmt-matches-primitive?:prim-inout-is-null:
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
||||||
|
@ -4531,7 +4531,7 @@ $mu-stmt-matches-primitive?:prim-inout-is-null:
|
||||||
{
|
{
|
||||||
(operand-matches-primitive? *esi *edi) # => eax
|
(operand-matches-primitive? *esi *edi) # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
||||||
}
|
}
|
||||||
|
@ -4550,10 +4550,10 @@ $mu-stmt-matches-primitive?:check-outputs:
|
||||||
{
|
{
|
||||||
$mu-stmt-matches-primitive?:check-output:
|
$mu-stmt-matches-primitive?:check-output:
|
||||||
81 7/subop/compare %esi 0/imm32
|
81 7/subop/compare %esi 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
{
|
{
|
||||||
81 7/subop/compare %edi 0/imm32
|
81 7/subop/compare %edi 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
# return true
|
# return true
|
||||||
b8/copy-to-eax 1/imm32
|
b8/copy-to-eax 1/imm32
|
||||||
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
||||||
|
@ -4565,7 +4565,7 @@ $mu-stmt-matches-primitive?:check-output:
|
||||||
# if (curr2 == 0) return false
|
# if (curr2 == 0) return false
|
||||||
{
|
{
|
||||||
81 7/subop/compare %edi 0/imm32
|
81 7/subop/compare %edi 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
b8/copy-to-eax 0/imm32
|
b8/copy-to-eax 0/imm32
|
||||||
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
||||||
}
|
}
|
||||||
|
@ -4573,7 +4573,7 @@ $mu-stmt-matches-primitive?:check-output:
|
||||||
{
|
{
|
||||||
(operand-matches-primitive? *esi *edi) # List-value List-value => eax
|
(operand-matches-primitive? *esi *edi) # List-value List-value => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
b8/copy-to-eax 0/imm32
|
b8/copy-to-eax 0/imm32
|
||||||
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
e9/jump $mu-stmt-matches-primitive?:end/disp32
|
||||||
}
|
}
|
||||||
|
@ -4612,28 +4612,28 @@ operand-matches-primitive?: # var : (handle var), prim-var : (handle var) => re
|
||||||
(type-equal? *(esi+4) *(edi+4)) # Var-type, Var-type => eax
|
(type-equal? *(esi+4) *(edi+4)) # Var-type, Var-type => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
74/jump-if-equal $operand-matches-primitive?:end/disp8
|
74/jump-if-= $operand-matches-primitive?:end/disp8
|
||||||
# return false if var->register doesn't match prim-var->register
|
# return false if var->register doesn't match prim-var->register
|
||||||
{
|
{
|
||||||
# if addresses are equal, don't return here
|
# if addresses are equal, don't return here
|
||||||
8b/-> *(esi+0x10) 0/r32/eax
|
8b/-> *(esi+0x10) 0/r32/eax
|
||||||
39/compare *(edi+0x10) 0/r32/eax
|
39/compare *(edi+0x10) 0/r32/eax
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
# if either address is 0, return false
|
# if either address is 0, return false
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $operand-matches-primitive?:end/disp8 # eax goes from meaning var->register to result
|
74/jump-if-= $operand-matches-primitive?:end/disp8 # eax goes from meaning var->register to result
|
||||||
81 7/subop/compare *(edi+0x10) 0/imm32
|
81 7/subop/compare *(edi+0x10) 0/imm32
|
||||||
74/jump-if-equal $operand-matches-primitive?:end/disp8 # eax goes from meaning var->register to result
|
74/jump-if-= $operand-matches-primitive?:end/disp8 # eax goes from meaning var->register to result
|
||||||
# if prim-var->register is "*", return true
|
# if prim-var->register is "*", return true
|
||||||
(string-equal? *(edi+0x10) "*") # Var-register
|
(string-equal? *(edi+0x10) "*") # Var-register
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
b8/copy-to-eax 1/imm32/true
|
b8/copy-to-eax 1/imm32/true
|
||||||
75/jump-if-not-equal $operand-matches-primitive?:end/disp8
|
75/jump-if-!= $operand-matches-primitive?:end/disp8
|
||||||
# if string contents don't match, return false
|
# if string contents don't match, return false
|
||||||
(string-equal? *(esi+0x10) *(edi+0x10)) # Var-register Var-register
|
(string-equal? *(esi+0x10) *(edi+0x10)) # Var-register Var-register
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
74/jump-if-equal $operand-matches-primitive?:end/disp8
|
74/jump-if-= $operand-matches-primitive?:end/disp8
|
||||||
}
|
}
|
||||||
# return true
|
# return true
|
||||||
b8/copy-to-eax 1/imm32/true
|
b8/copy-to-eax 1/imm32/true
|
||||||
|
@ -4661,19 +4661,19 @@ type-equal?: # a : (handle tree type-id), b : (handle tree type-id) => result/e
|
||||||
8b/-> %ecx 0/r32/eax # Var-type
|
8b/-> %ecx 0/r32/eax # Var-type
|
||||||
39/compare %edx 0/r32/eax # Var-type
|
39/compare %edx 0/r32/eax # Var-type
|
||||||
b8/copy-to-eax 1/imm32/true
|
b8/copy-to-eax 1/imm32/true
|
||||||
0f 84/jump-if-equal $type-equal?:end/disp32
|
0f 84/jump-if-= $type-equal?:end/disp32
|
||||||
# if (a == 0) return false
|
# if (a == 0) return false
|
||||||
81 7/subop/compare %ecx 0/imm32
|
81 7/subop/compare %ecx 0/imm32
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
0f 84/jump-if-equal $type-equal?:end/disp32
|
0f 84/jump-if-= $type-equal?:end/disp32
|
||||||
# if (b == 0) return false
|
# if (b == 0) return false
|
||||||
81 7/subop/compare %edx 0/imm32
|
81 7/subop/compare %edx 0/imm32
|
||||||
b8/copy-to-eax 0/imm32/false
|
b8/copy-to-eax 0/imm32/false
|
||||||
0f 84/jump-if-equal $type-equal?:end/disp32
|
0f 84/jump-if-= $type-equal?:end/disp32
|
||||||
# if (!type-equal?(a->left, b->left)) return false
|
# if (!type-equal?(a->left, b->left)) return false
|
||||||
(type-equal? *ecx *edx) # Tree-left, Tree-left => eax
|
(type-equal? *ecx *edx) # Tree-left, Tree-left => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 84/jump-if-equal $type-equal?:end/disp32
|
0f 84/jump-if-= $type-equal?:end/disp32
|
||||||
# return type-equal?(a->right, b->right
|
# return type-equal?(a->right, b->right
|
||||||
(type-equal? *(ecx+4) *(edx+4)) # Tree-right, Tree-right => eax
|
(type-equal? *(ecx+4) *(edx+4)) # Tree-right, Tree-right => eax
|
||||||
$type-equal?:end:
|
$type-equal?:end:
|
||||||
|
|
|
@ -18,11 +18,11 @@ Entry: # run tests if necessary, a REPL if not
|
||||||
{
|
{
|
||||||
# if (argc <= 1) break
|
# if (argc <= 1) break
|
||||||
81 7/subop/compare *ebp 1/imm32
|
81 7/subop/compare *ebp 1/imm32
|
||||||
7e/jump-if-lesser-or-equal break/disp8
|
7e/jump-if-<= break/disp8
|
||||||
# if (argv[1] != "test")) break
|
# if (argv[1] != "test")) break
|
||||||
(kernel-string-equal? *(ebp+8) "test") # => eax
|
(kernel-string-equal? *(ebp+8) "test") # => eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
#
|
#
|
||||||
(run-tests)
|
(run-tests)
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -84,7 +84,7 @@ repl: # in : (addr buffered-file), out : (addr buffered-file)
|
||||||
(lisp-read Stdin) # => eax : (handle cell)
|
(lisp-read Stdin) # => eax : (handle cell)
|
||||||
# if (eax == 0) break
|
# if (eax == 0) break
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal break/disp8
|
74/jump-if-= break/disp8
|
||||||
#
|
#
|
||||||
(lisp-eval %eax) # => eax : (handle cell)
|
(lisp-eval %eax) # => eax : (handle cell)
|
||||||
(lisp-print Stdout %eax)
|
(lisp-print Stdout %eax)
|
||||||
|
@ -123,7 +123,7 @@ lisp-read: # in : (addr buffered-file) -> eax : (handle cell)
|
||||||
# if (s->write == 0) return null
|
# if (s->write == 0) return null
|
||||||
{
|
{
|
||||||
81 7/subop/compare *ecx 0/imm32
|
81 7/subop/compare *ecx 0/imm32
|
||||||
75/jump-if-not-equal break/disp8
|
75/jump-if-!= break/disp8
|
||||||
b8/copy-to-eax 0/imm32/eof
|
b8/copy-to-eax 0/imm32/eof
|
||||||
eb/jump $lisp-read:end/disp8
|
eb/jump $lisp-read:end/disp8
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,7 +35,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto interactive
|
# if (argc <= 1) goto interactive
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $subx-pack-main:interactive/disp8
|
7e/jump-if-<= $subx-pack-main:interactive/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -47,7 +47,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto interactive
|
# . if (eax == false) goto interactive
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-pack-main:interactive/disp8
|
74/jump-if-= $subx-pack-main:interactive/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -159,7 +159,7 @@ $subx-pack:loop:
|
||||||
$subx-pack:check0:
|
$subx-pack:check0:
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
||||||
0f 84/jump-if-equal $subx-pack:break/disp32
|
0f 84/jump-if-= $subx-pack:break/disp32
|
||||||
#? # dump line {{{
|
#? # dump line {{{
|
||||||
#? # . write(2/stderr, "LL: ")
|
#? # . write(2/stderr, "LL: ")
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
|
@ -205,7 +205,7 @@ $subx-pack:check1:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) write-stream-data(out, line)
|
# . if (eax != false) write-stream-data(out, line)
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $subx-pack:pass-through/disp32
|
0f 85/jump-if-!= $subx-pack:pass-through/disp32
|
||||||
$subx-pack:check2:
|
$subx-pack:check2:
|
||||||
#? # dump word-slice {{{
|
#? # dump word-slice {{{
|
||||||
#? # . write(2/stderr, "AA: ")
|
#? # . write(2/stderr, "AA: ")
|
||||||
|
@ -258,7 +258,7 @@ $subx-pack:check2:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto check3
|
# . if (eax == false) goto check3
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 84/jump-if-equal $subx-pack:check3/disp32
|
0f 84/jump-if-= $subx-pack:check3/disp32
|
||||||
# word-slice = next-word(line)
|
# word-slice = next-word(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
52/push-edx
|
52/push-edx
|
||||||
|
@ -330,7 +330,7 @@ $subx-pack:check3:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# if (in-code? != false) convert-instruction(line, out)
|
# if (in-code? != false) convert-instruction(line, out)
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32/false # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32/false # compare ebx
|
||||||
74/jump-if-equal $subx-pack:data/disp8
|
74/jump-if-= $subx-pack:data/disp8
|
||||||
$subx-pack:code:
|
$subx-pack:code:
|
||||||
# . convert-instruction(line, out)
|
# . convert-instruction(line, out)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1026,7 +1026,7 @@ $convert-data:check0:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) break
|
# . if (eax != false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $convert-data:break/disp32
|
0f 85/jump-if-!= $convert-data:break/disp32
|
||||||
$convert-data:check-for-comment:
|
$convert-data:check-for-comment:
|
||||||
# if (slice-starts-with?(word-slice, "#"))
|
# if (slice-starts-with?(word-slice, "#"))
|
||||||
# . var start/edx : (addr byte) = word-slice->start
|
# . var start/edx : (addr byte) = word-slice->start
|
||||||
|
@ -1036,7 +1036,7 @@ $convert-data:check-for-comment:
|
||||||
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 0/r32/AL . . # copy byte at *edx to AL
|
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 0/r32/AL . . # copy byte at *edx to AL
|
||||||
# . if (c != '#') goto next check
|
# . if (c != '#') goto next check
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
75/jump-if-not-equal $convert-data:check-for-label/disp8
|
75/jump-if-!= $convert-data:check-for-label/disp8
|
||||||
$convert-data:comment:
|
$convert-data:comment:
|
||||||
# write-slice-buffered(out, word-slice)
|
# write-slice-buffered(out, word-slice)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1047,7 +1047,7 @@ $convert-data:comment:
|
||||||
# . . discard args
|
# . . discard args
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# return
|
# return
|
||||||
0f 85/jump-if-not-equal $convert-data:end/disp32
|
0f 85/jump-if-!= $convert-data:end/disp32
|
||||||
$convert-data:check-for-label:
|
$convert-data:check-for-label:
|
||||||
# if (slice-ends-with?(word-slice, ":"))
|
# if (slice-ends-with?(word-slice, ":"))
|
||||||
# . var end/edx : (addr byte) = word-slice->end
|
# . var end/edx : (addr byte) = word-slice->end
|
||||||
|
@ -1057,7 +1057,7 @@ $convert-data:check-for-label:
|
||||||
8a/copy-byte 1/mod/*+disp8 2/rm32/edx . . . 0/r32/AL -1/disp8 . # copy byte at *ecx to AL
|
8a/copy-byte 1/mod/*+disp8 2/rm32/edx . . . 0/r32/AL -1/disp8 . # copy byte at *ecx to AL
|
||||||
# . if (c != ':') goto next check
|
# . if (c != ':') goto next check
|
||||||
3d/compare-eax-and 0x3a/imm32/colon
|
3d/compare-eax-and 0x3a/imm32/colon
|
||||||
75/jump-if-not-equal $convert-data:check-for-imm32/disp8
|
75/jump-if-!= $convert-data:check-for-imm32/disp8
|
||||||
$convert-data:label:
|
$convert-data:label:
|
||||||
# write-stream-data(out, line)
|
# write-stream-data(out, line)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1068,7 +1068,7 @@ $convert-data:label:
|
||||||
# . . discard args
|
# . . discard args
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# return
|
# return
|
||||||
75/jump-if-not-equal $convert-data:end/disp8
|
75/jump-if-!= $convert-data:end/disp8
|
||||||
$convert-data:check-for-imm32:
|
$convert-data:check-for-imm32:
|
||||||
# if (has-metadata?(word-slice, "imm32"))
|
# if (has-metadata?(word-slice, "imm32"))
|
||||||
# . eax = has-metadata?(ecx, "imm32")
|
# . eax = has-metadata?(ecx, "imm32")
|
||||||
|
@ -1081,7 +1081,7 @@ $convert-data:check-for-imm32:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) process as a single byte
|
# . if (eax == false) process as a single byte
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $convert-data:single-byte/disp8
|
74/jump-if-= $convert-data:single-byte/disp8
|
||||||
$convert-data:imm32:
|
$convert-data:imm32:
|
||||||
# emit(out, word-slice, 4)
|
# emit(out, word-slice, 4)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1860,7 +1860,7 @@ $convert-instruction:check0:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) pass through
|
# . if (eax != false) pass through
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
75/jump-if-not-equal $convert-instruction:pass-through/disp8
|
75/jump-if-!= $convert-instruction:pass-through/disp8
|
||||||
$convert-instruction:check1:
|
$convert-instruction:check1:
|
||||||
# if (slice-starts-with?(word-slice, "#")) write-stream-data(out, line)
|
# if (slice-starts-with?(word-slice, "#")) write-stream-data(out, line)
|
||||||
# . var start/edx : (addr byte) = word-slice->start
|
# . var start/edx : (addr byte) = word-slice->start
|
||||||
|
@ -1870,7 +1870,7 @@ $convert-instruction:check1:
|
||||||
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 0/r32/AL . . # copy byte at *edx to AL
|
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 0/r32/AL . . # copy byte at *edx to AL
|
||||||
# . if (c == '#') pass through
|
# . if (c == '#') pass through
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
74/jump-if-equal $convert-instruction:pass-through/disp8
|
74/jump-if-= $convert-instruction:pass-through/disp8
|
||||||
$convert-instruction:check2:
|
$convert-instruction:check2:
|
||||||
# if (slice-ends-with?(word-slice, ":")) write-stream-data(out, line)
|
# if (slice-ends-with?(word-slice, ":")) write-stream-data(out, line)
|
||||||
# . var end/edx : (addr byte) = word-slice->end
|
# . var end/edx : (addr byte) = word-slice->end
|
||||||
|
@ -1880,7 +1880,7 @@ $convert-instruction:check2:
|
||||||
8a/copy-byte 1/mod/*+disp8 2/rm32/edx . . . 0/r32/AL -1/disp8 . # copy byte at *ecx to AL
|
8a/copy-byte 1/mod/*+disp8 2/rm32/edx . . . 0/r32/AL -1/disp8 . # copy byte at *ecx to AL
|
||||||
# . if (c == ':') pass through
|
# . if (c == ':') pass through
|
||||||
3d/compare-eax-and 0x3a/imm32/colon
|
3d/compare-eax-and 0x3a/imm32/colon
|
||||||
75/jump-if-not-equal $convert-instruction:really-convert/disp8
|
75/jump-if-!= $convert-instruction:really-convert/disp8
|
||||||
$convert-instruction:pass-through:
|
$convert-instruction:pass-through:
|
||||||
# write-stream-data(out, line)
|
# write-stream-data(out, line)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -2028,7 +2028,7 @@ $emit-opcodes:op1:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) return
|
# . if (eax != false) return
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-opcodes:end/disp32
|
0f 85/jump-if-!= $emit-opcodes:end/disp32
|
||||||
# if (slice-starts-with?(op1, "#")) return
|
# if (slice-starts-with?(op1, "#")) return
|
||||||
# . var start/ebx : (addr byte) = op1->start
|
# . var start/ebx : (addr byte) = op1->start
|
||||||
8b/copy 0/mod/indirect 1/rm32/ecx . . . 3/r32/ebx . . # copy *ecx to ebx
|
8b/copy 0/mod/indirect 1/rm32/ecx . . . 3/r32/ebx . . # copy *ecx to ebx
|
||||||
|
@ -2037,7 +2037,7 @@ $emit-opcodes:op1:
|
||||||
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
||||||
# . if (c == '#') return
|
# . if (c == '#') return
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal $emit-opcodes:end/disp32
|
0f 84/jump-if-= $emit-opcodes:end/disp32
|
||||||
# op1 = next-token-from-slice(op1->start, op1->end, '/')
|
# op1 = next-token-from-slice(op1->start, op1->end, '/')
|
||||||
# . . push args
|
# . . push args
|
||||||
51/push-ecx
|
51/push-ecx
|
||||||
|
@ -2075,7 +2075,7 @@ $emit-opcodes:op1:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) goto op2
|
# . if (eax != false) goto op2
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
75/jump-if-not-equal $emit-opcodes:op2/disp8
|
75/jump-if-!= $emit-opcodes:op2/disp8
|
||||||
# if (slice-equal?(op1, "f2")) goto op2
|
# if (slice-equal?(op1, "f2")) goto op2
|
||||||
# . eax = slice-equal?(op1, "f2")
|
# . eax = slice-equal?(op1, "f2")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -2087,7 +2087,7 @@ $emit-opcodes:op1:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) goto op2
|
# . if (eax != false) goto op2
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
75/jump-if-not-equal $emit-opcodes:op2/disp8
|
75/jump-if-!= $emit-opcodes:op2/disp8
|
||||||
# if (slice-equal?(op1, "f3")) goto op2
|
# if (slice-equal?(op1, "f3")) goto op2
|
||||||
# . eax = slice-equal?(op1, "f3")
|
# . eax = slice-equal?(op1, "f3")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -2099,7 +2099,7 @@ $emit-opcodes:op1:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) goto op2
|
# . if (eax != false) goto op2
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
75/jump-if-not-equal $emit-opcodes:op2/disp8
|
75/jump-if-!= $emit-opcodes:op2/disp8
|
||||||
# otherwise return
|
# otherwise return
|
||||||
e9/jump $emit-opcodes:end/disp32
|
e9/jump $emit-opcodes:end/disp32
|
||||||
$emit-opcodes:op2:
|
$emit-opcodes:op2:
|
||||||
|
@ -2121,7 +2121,7 @@ $emit-opcodes:op2:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) return
|
# . if (eax != false) return
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-opcodes:end/disp32
|
0f 85/jump-if-!= $emit-opcodes:end/disp32
|
||||||
# if (slice-starts-with?(op2, "#")) return
|
# if (slice-starts-with?(op2, "#")) return
|
||||||
# . var start/ebx : (addr byte) = op2->start
|
# . var start/ebx : (addr byte) = op2->start
|
||||||
8b/copy 0/mod/indirect 2/rm32/edx . . . 3/r32/ebx . . # copy *edx to ebx
|
8b/copy 0/mod/indirect 2/rm32/edx . . . 3/r32/ebx . . # copy *edx to ebx
|
||||||
|
@ -2130,7 +2130,7 @@ $emit-opcodes:op2:
|
||||||
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
||||||
# . if (c == '#') return
|
# . if (c == '#') return
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal $emit-opcodes:end/disp32
|
0f 84/jump-if-= $emit-opcodes:end/disp32
|
||||||
# op2 = next-token-from-slice(op2->start, op2->end, '/')
|
# op2 = next-token-from-slice(op2->start, op2->end, '/')
|
||||||
# . . push args
|
# . . push args
|
||||||
52/push-edx
|
52/push-edx
|
||||||
|
@ -2168,7 +2168,7 @@ $emit-opcodes:op2:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) return
|
# . if (eax != false) return
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-opcodes:end/disp32
|
0f 85/jump-if-!= $emit-opcodes:end/disp32
|
||||||
# if (!slice-equal?(op2, "0f")) return
|
# if (!slice-equal?(op2, "0f")) return
|
||||||
# . eax = slice-equal?(op2, "0f")
|
# . eax = slice-equal?(op2, "0f")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -2180,7 +2180,7 @@ $emit-opcodes:op2:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) return
|
# . if (eax == false) return
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 84/jump-if-equal $emit-opcodes:end/disp32
|
0f 84/jump-if-= $emit-opcodes:end/disp32
|
||||||
$emit-opcodes:op3:
|
$emit-opcodes:op3:
|
||||||
# next-word(line, op3) # reuse op2/edx
|
# next-word(line, op3) # reuse op2/edx
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -2200,7 +2200,7 @@ $emit-opcodes:op3:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) return
|
# . if (eax != false) return
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-opcodes:end/disp32
|
0f 85/jump-if-!= $emit-opcodes:end/disp32
|
||||||
# if (slice-starts-with?(op3, "#")) return
|
# if (slice-starts-with?(op3, "#")) return
|
||||||
# . var start/ebx : (addr byte) = op2->start
|
# . var start/ebx : (addr byte) = op2->start
|
||||||
8b/copy 0/mod/indirect 2/rm32/edx . . . 3/r32/ebx . . # copy *edx to ebx
|
8b/copy 0/mod/indirect 2/rm32/edx . . . 3/r32/ebx . . # copy *edx to ebx
|
||||||
|
@ -2209,7 +2209,7 @@ $emit-opcodes:op3:
|
||||||
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
||||||
# . if (c == '#') return
|
# . if (c == '#') return
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal $emit-opcodes:end/disp32
|
0f 84/jump-if-= $emit-opcodes:end/disp32
|
||||||
# op3 = next-token-from-slice(op3->start, op3->end, '/')
|
# op3 = next-token-from-slice(op3->start, op3->end, '/')
|
||||||
# . . push args
|
# . . push args
|
||||||
52/push-edx
|
52/push-edx
|
||||||
|
@ -2397,7 +2397,7 @@ $emit-modrm:check0:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) pass through
|
# . if (eax != false) pass through
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-modrm:break/disp32
|
0f 85/jump-if-!= $emit-modrm:break/disp32
|
||||||
$emit-modrm:check1:
|
$emit-modrm:check1:
|
||||||
# if (slice-starts-with?(word-slice, "#")) break
|
# if (slice-starts-with?(word-slice, "#")) break
|
||||||
# . spill edx
|
# . spill edx
|
||||||
|
@ -2411,7 +2411,7 @@ $emit-modrm:check1:
|
||||||
5a/pop-to-edx
|
5a/pop-to-edx
|
||||||
# . if (c == '#') pass through
|
# . if (c == '#') pass through
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal $emit-modrm:break/disp32
|
0f 84/jump-if-= $emit-modrm:break/disp32
|
||||||
$emit-modrm:check-for-mod:
|
$emit-modrm:check-for-mod:
|
||||||
# if (has-metadata?(word-slice, "mod"))
|
# if (has-metadata?(word-slice, "mod"))
|
||||||
# . eax = has-metadata?(ecx, "mod")
|
# . eax = has-metadata?(ecx, "mod")
|
||||||
|
@ -2424,7 +2424,7 @@ $emit-modrm:check-for-mod:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-modrm:check-for-rm32/disp8
|
74/jump-if-= $emit-modrm:check-for-rm32/disp8
|
||||||
$emit-modrm:mod:
|
$emit-modrm:mod:
|
||||||
# mod = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
# mod = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
||||||
# . eax = parse-datum-of-word(word-slice)
|
# . eax = parse-datum-of-word(word-slice)
|
||||||
|
@ -2452,7 +2452,7 @@ $emit-modrm:check-for-rm32:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-modrm:check-for-r32/disp8
|
74/jump-if-= $emit-modrm:check-for-r32/disp8
|
||||||
$emit-modrm:rm32:
|
$emit-modrm:rm32:
|
||||||
# rm32 = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
# rm32 = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
||||||
# . eax = parse-datum-of-word(word-slice)
|
# . eax = parse-datum-of-word(word-slice)
|
||||||
|
@ -2480,7 +2480,7 @@ $emit-modrm:check-for-r32:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-modrm:check-for-subop/disp8
|
74/jump-if-= $emit-modrm:check-for-subop/disp8
|
||||||
$emit-modrm:r32:
|
$emit-modrm:r32:
|
||||||
# r32 = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
# r32 = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
||||||
# . eax = parse-datum-of-word(word-slice)
|
# . eax = parse-datum-of-word(word-slice)
|
||||||
|
@ -2508,7 +2508,7 @@ $emit-modrm:check-for-subop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) loop
|
# . if (eax == false) loop
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 84/jump-if-equal $emit-modrm:loop/disp32
|
0f 84/jump-if-= $emit-modrm:loop/disp32
|
||||||
$emit-modrm:subop:
|
$emit-modrm:subop:
|
||||||
# r32 = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
# r32 = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
||||||
# . eax = parse-datum-of-word(word-slice)
|
# . eax = parse-datum-of-word(word-slice)
|
||||||
|
@ -2527,7 +2527,7 @@ $emit-modrm:subop:
|
||||||
$emit-modrm:break:
|
$emit-modrm:break:
|
||||||
# if (!has-modrm?) return
|
# if (!has-modrm?) return
|
||||||
81 7/subop/compare 3/mod/direct 2/rm32/edx . . . . . 0/imm32/false # compare edx
|
81 7/subop/compare 3/mod/direct 2/rm32/edx . . . . . 0/imm32/false # compare edx
|
||||||
74/jump-if-equal $emit-modrm:end/disp8
|
74/jump-if-= $emit-modrm:end/disp8
|
||||||
$emit-modrm:calculate:
|
$emit-modrm:calculate:
|
||||||
# var modrm/ebx : byte = mod & 0b11
|
# var modrm/ebx : byte = mod & 0b11
|
||||||
81 4/subop/and 3/mod/direct 3/rm32/ebx . . . . . 3/imm32/0b11 # bitwise and of ebx
|
81 4/subop/and 3/mod/direct 3/rm32/ebx . . . . . 3/imm32/0b11 # bitwise and of ebx
|
||||||
|
@ -2706,7 +2706,7 @@ $emit-sib:check0:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) pass through
|
# . if (eax != false) pass through
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-sib:break/disp32
|
0f 85/jump-if-!= $emit-sib:break/disp32
|
||||||
$emit-sib:check1:
|
$emit-sib:check1:
|
||||||
# if (slice-starts-with?(word-slice, "#")) break
|
# if (slice-starts-with?(word-slice, "#")) break
|
||||||
# . spill edx
|
# . spill edx
|
||||||
|
@ -2720,7 +2720,7 @@ $emit-sib:check1:
|
||||||
5a/pop-to-edx
|
5a/pop-to-edx
|
||||||
# . if (c == '#') pass through
|
# . if (c == '#') pass through
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal $emit-sib:break/disp32
|
0f 84/jump-if-= $emit-sib:break/disp32
|
||||||
$emit-sib:check-for-scale:
|
$emit-sib:check-for-scale:
|
||||||
# if (has-metadata?(word-slice, "scale"))
|
# if (has-metadata?(word-slice, "scale"))
|
||||||
# . eax = has-metadata?(ecx, "scale")
|
# . eax = has-metadata?(ecx, "scale")
|
||||||
|
@ -2733,7 +2733,7 @@ $emit-sib:check-for-scale:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-sib:check-for-base/disp8
|
74/jump-if-= $emit-sib:check-for-base/disp8
|
||||||
$emit-sib:scale:
|
$emit-sib:scale:
|
||||||
# scale = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
# scale = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
||||||
# . eax = parse-datum-of-word(word-slice)
|
# . eax = parse-datum-of-word(word-slice)
|
||||||
|
@ -2761,7 +2761,7 @@ $emit-sib:check-for-base:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-sib:check-for-index/disp8
|
74/jump-if-= $emit-sib:check-for-index/disp8
|
||||||
$emit-sib:base:
|
$emit-sib:base:
|
||||||
# base = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
# base = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
||||||
# . eax = parse-datum-of-word(word-slice)
|
# . eax = parse-datum-of-word(word-slice)
|
||||||
|
@ -2789,7 +2789,7 @@ $emit-sib:check-for-index:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) loop
|
# . if (eax == false) loop
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 84/jump-if-equal $emit-sib:loop/disp32
|
0f 84/jump-if-= $emit-sib:loop/disp32
|
||||||
$emit-sib:index:
|
$emit-sib:index:
|
||||||
# index = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
# index = parse-hex-int(next-token-from-slice(word-slice->start, word-slice->end, '/'))
|
||||||
# . eax = parse-datum-of-word(word-slice)
|
# . eax = parse-datum-of-word(word-slice)
|
||||||
|
@ -2808,7 +2808,7 @@ $emit-sib:index:
|
||||||
$emit-sib:break:
|
$emit-sib:break:
|
||||||
# if (!has-sib?) return
|
# if (!has-sib?) return
|
||||||
81 7/subop/compare 3/mod/direct 2/rm32/edx . . . . . 0/imm32/false # compare edx
|
81 7/subop/compare 3/mod/direct 2/rm32/edx . . . . . 0/imm32/false # compare edx
|
||||||
74/jump-if-equal $emit-sib:end/disp8
|
74/jump-if-= $emit-sib:end/disp8
|
||||||
$emit-sib:calculate:
|
$emit-sib:calculate:
|
||||||
# var sib/ebx : byte = scale & 0b11
|
# var sib/ebx : byte = scale & 0b11
|
||||||
81 4/subop/and 3/mod/direct 3/rm32/ebx . . . . . 3/imm32/0b11 # bitwise and of ebx
|
81 4/subop/and 3/mod/direct 3/rm32/ebx . . . . . 3/imm32/0b11 # bitwise and of ebx
|
||||||
|
@ -2969,7 +2969,7 @@ $emit-disp:check0:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) pass through
|
# . if (eax != false) pass through
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-disp:break/disp32
|
0f 85/jump-if-!= $emit-disp:break/disp32
|
||||||
$emit-disp:check1:
|
$emit-disp:check1:
|
||||||
# if (slice-starts-with?(word-slice, "#")) break
|
# if (slice-starts-with?(word-slice, "#")) break
|
||||||
# . var start/edx : (addr byte) = word-slice->start
|
# . var start/edx : (addr byte) = word-slice->start
|
||||||
|
@ -2979,7 +2979,7 @@ $emit-disp:check1:
|
||||||
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 0/r32/AL . . # copy byte at *edx to AL
|
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 0/r32/AL . . # copy byte at *edx to AL
|
||||||
# . if (c == '#') break
|
# . if (c == '#') break
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal $emit-disp:break/disp32
|
0f 84/jump-if-= $emit-disp:break/disp32
|
||||||
$emit-disp:check-for-disp32:
|
$emit-disp:check-for-disp32:
|
||||||
# if (has-metadata?(word-slice, "disp32"))
|
# if (has-metadata?(word-slice, "disp32"))
|
||||||
# . eax = has-metadata?(ecx, "disp32")
|
# . eax = has-metadata?(ecx, "disp32")
|
||||||
|
@ -2992,7 +2992,7 @@ $emit-disp:check-for-disp32:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-disp:check-for-disp16/disp8
|
74/jump-if-= $emit-disp:check-for-disp16/disp8
|
||||||
$emit-disp:disp32:
|
$emit-disp:disp32:
|
||||||
# emit(out, word-slice, 4)
|
# emit(out, word-slice, 4)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -3017,7 +3017,7 @@ $emit-disp:check-for-disp16:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-disp:check-for-disp8/disp8
|
74/jump-if-= $emit-disp:check-for-disp8/disp8
|
||||||
$emit-disp:disp16:
|
$emit-disp:disp16:
|
||||||
# emit(out, word-slice, 2)
|
# emit(out, word-slice, 2)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -3042,7 +3042,7 @@ $emit-disp:check-for-disp8:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) loop
|
# . if (eax == false) loop
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 84/jump-if-equal $emit-disp:loop/disp32
|
0f 84/jump-if-= $emit-disp:loop/disp32
|
||||||
$emit-disp:disp8:
|
$emit-disp:disp8:
|
||||||
# emit(out, word-slice, 1)
|
# emit(out, word-slice, 1)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -3188,7 +3188,7 @@ $emit-imm:check0:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) pass through
|
# . if (eax != false) pass through
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-imm:break/disp32
|
0f 85/jump-if-!= $emit-imm:break/disp32
|
||||||
$emit-imm:check1:
|
$emit-imm:check1:
|
||||||
# if (slice-starts-with?(word-slice, "#")) break
|
# if (slice-starts-with?(word-slice, "#")) break
|
||||||
# . var start/edx : (addr byte) = slice->start
|
# . var start/edx : (addr byte) = slice->start
|
||||||
|
@ -3198,7 +3198,7 @@ $emit-imm:check1:
|
||||||
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 0/r32/AL . . # copy byte at *edx to AL
|
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 0/r32/AL . . # copy byte at *edx to AL
|
||||||
# . if (c == '#') break
|
# . if (c == '#') break
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal $emit-imm:break/disp32
|
0f 84/jump-if-= $emit-imm:break/disp32
|
||||||
$emit-imm:check-for-imm32:
|
$emit-imm:check-for-imm32:
|
||||||
# if (has-metadata?(word-slice, "imm32"))
|
# if (has-metadata?(word-slice, "imm32"))
|
||||||
# . eax = has-metadata?(ecx, "imm32")
|
# . eax = has-metadata?(ecx, "imm32")
|
||||||
|
@ -3211,7 +3211,7 @@ $emit-imm:check-for-imm32:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-imm:check-for-imm16/disp8
|
74/jump-if-= $emit-imm:check-for-imm16/disp8
|
||||||
$emit-imm:imm32:
|
$emit-imm:imm32:
|
||||||
# emit(out, word-slice, 4)
|
# emit(out, word-slice, 4)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -3236,7 +3236,7 @@ $emit-imm:check-for-imm16:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-imm:check-for-imm8/disp8
|
74/jump-if-= $emit-imm:check-for-imm8/disp8
|
||||||
$emit-imm:imm16:
|
$emit-imm:imm16:
|
||||||
# emit(out, word-slice, 2)
|
# emit(out, word-slice, 2)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -3261,7 +3261,7 @@ $emit-imm:check-for-imm8:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) loop
|
# . if (eax == false) loop
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 84/jump-if-equal $emit-imm:loop/disp32
|
0f 84/jump-if-= $emit-imm:loop/disp32
|
||||||
$emit-imm:imm8:
|
$emit-imm:imm8:
|
||||||
# emit(out, word-slice, 1)
|
# emit(out, word-slice, 1)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
|
|
@ -68,7 +68,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto interactive
|
# if (argc <= 1) goto interactive
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $subx-sigils-main:interactive/disp8
|
7e/jump-if-<= $subx-sigils-main:interactive/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -80,7 +80,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto interactive
|
# . if (eax == false) goto interactive
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-sigils-main:interactive/disp8
|
74/jump-if-= $subx-sigils-main:interactive/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -170,7 +170,7 @@ $subx-sigils:line-loop:
|
||||||
$subx-sigils:check0:
|
$subx-sigils:check0:
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
||||||
0f 84/jump-if-equal $subx-sigils:break/disp32
|
0f 84/jump-if-= $subx-sigils:break/disp32
|
||||||
$subx-sigils:word-loop:
|
$subx-sigils:word-loop:
|
||||||
# next-word-or-expression(line, word-slice)
|
# next-word-or-expression(line, word-slice)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -191,7 +191,7 @@ $subx-sigils:check1:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) break
|
# . if (eax != false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $subx-sigils:next-line/disp32
|
0f 85/jump-if-!= $subx-sigils:next-line/disp32
|
||||||
$subx-sigils:check-for-comment:
|
$subx-sigils:check-for-comment:
|
||||||
# if (slice-starts-with?(word-slice, "#")) continue
|
# if (slice-starts-with?(word-slice, "#")) continue
|
||||||
# . start/ebx = word-slice->start
|
# . start/ebx = word-slice->start
|
||||||
|
@ -201,11 +201,11 @@ $subx-sigils:check-for-comment:
|
||||||
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
8a/copy-byte 0/mod/indirect 3/rm32/ebx . . . 0/r32/AL . . # copy byte at *ebx to AL
|
||||||
# . if (eax == '#') continue
|
# . if (eax == '#') continue
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
74/jump-if-equal $subx-sigils:word-loop/disp8
|
74/jump-if-= $subx-sigils:word-loop/disp8
|
||||||
$subx-sigils:check-for-direct-mode:
|
$subx-sigils:check-for-direct-mode:
|
||||||
# if (!slice-starts-with?(word-slice, "%")) goto next check
|
# if (!slice-starts-with?(word-slice, "%")) goto next check
|
||||||
3d/compare-eax-and 0x25/imm32/percent
|
3d/compare-eax-and 0x25/imm32/percent
|
||||||
75/jump-if-not-equal $subx-sigils:check-for-indirect-mode/disp8
|
75/jump-if-!= $subx-sigils:check-for-indirect-mode/disp8
|
||||||
$subx-sigils:direct-mode:
|
$subx-sigils:direct-mode:
|
||||||
#? # dump word-slice {{{
|
#? # dump word-slice {{{
|
||||||
#? # . write(2/stderr, "w: ")
|
#? # . write(2/stderr, "w: ")
|
||||||
|
@ -260,7 +260,7 @@ $subx-sigils:direct-mode:
|
||||||
$subx-sigils:check-for-indirect-mode:
|
$subx-sigils:check-for-indirect-mode:
|
||||||
# if (!slice-starts-with?(word-slice, "*")) goto next check
|
# if (!slice-starts-with?(word-slice, "*")) goto next check
|
||||||
3d/compare-eax-and 0x2a/imm32/asterisk
|
3d/compare-eax-and 0x2a/imm32/asterisk
|
||||||
75/jump-if-not-equal $subx-sigils:check-for-invalid-addition/disp8
|
75/jump-if-!= $subx-sigils:check-for-invalid-addition/disp8
|
||||||
# if (!disp32-mode?(word-slice)) goto indirect mode
|
# if (!disp32-mode?(word-slice)) goto indirect mode
|
||||||
# . eax = disp32-mode?(word-slice)
|
# . eax = disp32-mode?(word-slice)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -271,7 +271,7 @@ $subx-sigils:check-for-indirect-mode:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax == false) goto indirect mode
|
# . if (eax == false) goto indirect mode
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-sigils:indirect-mode/disp8
|
74/jump-if-= $subx-sigils:indirect-mode/disp8
|
||||||
$subx-sigils:disp32-mode:
|
$subx-sigils:disp32-mode:
|
||||||
# emit-indirect-mode(out, word-slice)
|
# emit-indirect-mode(out, word-slice)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -317,11 +317,11 @@ $subx-sigils:indirect-mode:
|
||||||
$subx-sigils:check-for-invalid-addition:
|
$subx-sigils:check-for-invalid-addition:
|
||||||
# if (slice-starts-with?(word-slice, "+")) goto error1
|
# if (slice-starts-with?(word-slice, "+")) goto error1
|
||||||
3d/compare-eax-and 0x2b/imm32/plus
|
3d/compare-eax-and 0x2b/imm32/plus
|
||||||
74/jump-if-equal $subx-sigils:error1/disp8
|
74/jump-if-= $subx-sigils:error1/disp8
|
||||||
$subx-sigils:check-for-invalid-left-shift:
|
$subx-sigils:check-for-invalid-left-shift:
|
||||||
# if (slice-starts-with?(word-slice, "<")) goto error1
|
# if (slice-starts-with?(word-slice, "<")) goto error1
|
||||||
3d/compare-eax-and 0x3c/imm32/less-than
|
3d/compare-eax-and 0x3c/imm32/less-than
|
||||||
74/jump-if-equal $subx-sigils:error1/disp8
|
74/jump-if-= $subx-sigils:error1/disp8
|
||||||
$subx-sigils:regular-word:
|
$subx-sigils:regular-word:
|
||||||
# write-slice-buffered(out, word-slice)
|
# write-slice-buffered(out, word-slice)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1652,7 +1652,7 @@ $next-word-or-expression:check0:
|
||||||
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # copy *(esi+4) to ecx
|
8b/copy 1/mod/*+disp8 6/rm32/esi . . . 1/r32/ecx 4/disp8 . # copy *(esi+4) to ecx
|
||||||
# . if (ecx < line->write) goto next check
|
# . if (ecx < line->write) goto next check
|
||||||
3b/compare 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # compare ecx with *esi
|
3b/compare 0/mod/indirect 6/rm32/esi . . . 1/r32/ecx . . # compare ecx with *esi
|
||||||
7c/jump-if-lesser $next-word-or-expression:check-for-comment/disp8
|
7c/jump-if-< $next-word-or-expression:check-for-comment/disp8
|
||||||
# . return out = {0, 0}
|
# . return out = {0, 0}
|
||||||
c7 0/subop/copy 0/mod/direct 7/rm32/edi . . . . . 0/imm32 # copy to *edi
|
c7 0/subop/copy 0/mod/direct 7/rm32/edi . . . . . 0/imm32 # copy to *edi
|
||||||
c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi . . . . 4/disp8 0/imm32 # copy to *(edi+4)
|
c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi . . . . 4/disp8 0/imm32 # copy to *(edi+4)
|
||||||
|
@ -1667,7 +1667,7 @@ $next-word-or-expression:check-for-comment:
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# . if (eax != '#') goto next check
|
# . if (eax != '#') goto next check
|
||||||
3d/compare-eax-and 0x23/imm32/pound
|
3d/compare-eax-and 0x23/imm32/pound
|
||||||
75/jump-if-not-equal $next-word-or-expression:check-for-string-literal/disp8
|
75/jump-if-!= $next-word-or-expression:check-for-string-literal/disp8
|
||||||
$next-word-or-expression:comment:
|
$next-word-or-expression:comment:
|
||||||
# out->end = &line->data[line->write]
|
# out->end = &line->data[line->write]
|
||||||
8b/copy 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # copy *esi to eax
|
8b/copy 0/mod/indirect 6/rm32/esi . . . 0/r32/eax . . # copy *esi to eax
|
||||||
|
@ -1681,7 +1681,7 @@ $next-word-or-expression:comment:
|
||||||
$next-word-or-expression:check-for-string-literal:
|
$next-word-or-expression:check-for-string-literal:
|
||||||
# if (line->data[line->read] != '"') goto next check
|
# if (line->data[line->read] != '"') goto next check
|
||||||
3d/compare-eax-and 0x22/imm32/dquote
|
3d/compare-eax-and 0x22/imm32/dquote
|
||||||
75/jump-if-not-equal $next-word-or-expression:check-for-expression/disp8
|
75/jump-if-!= $next-word-or-expression:check-for-expression/disp8
|
||||||
$next-word-or-expression:string-literal:
|
$next-word-or-expression:string-literal:
|
||||||
# skip-string(line)
|
# skip-string(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1695,14 +1695,14 @@ $next-word-or-expression:string-literal:
|
||||||
$next-word-or-expression:check-for-expression:
|
$next-word-or-expression:check-for-expression:
|
||||||
# if (line->data[line->read] != '*') goto next check
|
# if (line->data[line->read] != '*') goto next check
|
||||||
3d/compare-eax-and 0x2a/imm32/asterisk
|
3d/compare-eax-and 0x2a/imm32/asterisk
|
||||||
75/jump-if-not-equal $next-word-or-expression:regular-word/disp8
|
75/jump-if-!= $next-word-or-expression:regular-word/disp8
|
||||||
# if (line->data[line->read + 1] == ' ') goto error1
|
# if (line->data[line->read + 1] == ' ') goto error1
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xd/disp8 . # copy byte at *(esi+ecx+12+1) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xd/disp8 . # copy byte at *(esi+ecx+12+1) to AL
|
||||||
3d/compare-eax-and 0x20/imm32/space
|
3d/compare-eax-and 0x20/imm32/space
|
||||||
74/jump-if-equal $next-word-or-expression:error1/disp8
|
74/jump-if-= $next-word-or-expression:error1/disp8
|
||||||
# if (line->data[line->read + 1] != '(') goto regular word
|
# if (line->data[line->read + 1] != '(') goto regular word
|
||||||
3d/compare-eax-and 0x28/imm32/open-paren
|
3d/compare-eax-and 0x28/imm32/open-paren
|
||||||
75/jump-if-not-equal $next-word-or-expression:regular-word/disp8
|
75/jump-if-!= $next-word-or-expression:regular-word/disp8
|
||||||
$next-word-or-expression:paren:
|
$next-word-or-expression:paren:
|
||||||
# skip-until-close-paren(line)
|
# skip-until-close-paren(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -1717,7 +1717,7 @@ $next-word-or-expression:paren:
|
||||||
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx . 0/r32/AL 0xc/disp8 . # copy byte at *(esi+ecx+12) to AL
|
||||||
# . if (eax != ')') goto error2
|
# . if (eax != ')') goto error2
|
||||||
3d/compare-eax-and 0x29/imm32/close-paren
|
3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
75/jump-if-not-equal $next-word-or-expression:error2/disp8
|
75/jump-if-!= $next-word-or-expression:error2/disp8
|
||||||
# skip ')'
|
# skip ')'
|
||||||
ff 0/subop/increment 1/mod/*+disp8 6/rm32/esi . . . . 4/disp8 . # increment *(esi+4)
|
ff 0/subop/increment 1/mod/*+disp8 6/rm32/esi . . . . 4/disp8 . # increment *(esi+4)
|
||||||
# fall through
|
# fall through
|
||||||
|
@ -2269,7 +2269,7 @@ $parse-effective-address:check-for-simple-register:
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
||||||
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
||||||
3d/compare-eax-and 0x28/imm32/open-paren
|
3d/compare-eax-and 0x28/imm32/open-paren
|
||||||
74/jump-if-equal $parse-effective-address:compound-expression/disp8
|
74/jump-if-= $parse-effective-address:compound-expression/disp8
|
||||||
$parse-effective-address:simple-register:
|
$parse-effective-address:simple-register:
|
||||||
# local-slice = next-token-from-slice(local-slice->start, local-slice->end, "/")
|
# local-slice = next-token-from-slice(local-slice->start, local-slice->end, "/")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -2335,13 +2335,13 @@ $parse-effective-address:compound-expression:
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
||||||
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
||||||
3d/compare-eax-and 0x29/imm32/close-paren
|
3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
0f 84/jump-if-equal $parse-effective-address:end/disp32
|
0f 84/jump-if-= $parse-effective-address:end/disp32
|
||||||
# if (*local-slice->start == '-') goto displacement
|
# if (*local-slice->start == '-') goto displacement
|
||||||
3d/compare-eax-and 0x2d/imm32/minus
|
3d/compare-eax-and 0x2d/imm32/minus
|
||||||
0f 84/jump-if-equal $parse-effective-address:displacement/disp32
|
0f 84/jump-if-= $parse-effective-address:displacement/disp32
|
||||||
# if (*local-slice->start != '+') goto error1
|
# if (*local-slice->start != '+') goto error1
|
||||||
3d/compare-eax-and 0x2b/imm32/plus
|
3d/compare-eax-and 0x2b/imm32/plus
|
||||||
0f 85/jump-if-not-equal $parse-effective-address:error1/disp32
|
0f 85/jump-if-!= $parse-effective-address:error1/disp32
|
||||||
$parse-effective-address:check-for-index:
|
$parse-effective-address:check-for-index:
|
||||||
# ++local-slice->start to skip '+'
|
# ++local-slice->start to skip '+'
|
||||||
ff 0/subop/increment 0/mod/indirect 6/rm32/esi . . . . . . # increment *esi
|
ff 0/subop/increment 0/mod/indirect 6/rm32/esi . . . . . . # increment *esi
|
||||||
|
@ -2385,7 +2385,7 @@ $parse-effective-address:resolve-ambiguity:
|
||||||
59/pop-to-ecx
|
59/pop-to-ecx
|
||||||
# . if (eax == 0) goto displacement
|
# . if (eax == 0) goto displacement
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 84/jump-if-equal $parse-effective-address:displacement/disp32
|
0f 84/jump-if-= $parse-effective-address:displacement/disp32
|
||||||
$parse-effective-address:index:
|
$parse-effective-address:index:
|
||||||
# read register into index
|
# read register into index
|
||||||
# . eax = next-register(local-slice)
|
# . eax = next-register(local-slice)
|
||||||
|
@ -2412,11 +2412,11 @@ $parse-effective-address:index:
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
||||||
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
||||||
3d/compare-eax-and 0x29/imm32/close-paren
|
3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
0f 84/jump-if-equal $parse-effective-address:end/disp32
|
0f 84/jump-if-= $parse-effective-address:end/disp32
|
||||||
$parse-effective-address:check-for-scale:
|
$parse-effective-address:check-for-scale:
|
||||||
# if (*local-slice->start != '<') goto next check
|
# if (*local-slice->start != '<') goto next check
|
||||||
3d/compare-eax-and 0x3c/imm32/less-than
|
3d/compare-eax-and 0x3c/imm32/less-than
|
||||||
75/jump-if-not-equal $parse-effective-address:check-for-displacement/disp8
|
75/jump-if-!= $parse-effective-address:check-for-displacement/disp8
|
||||||
# ++local-slice->start to skip '<'
|
# ++local-slice->start to skip '<'
|
||||||
ff 0/subop/increment 0/mod/indirect 6/rm32/esi . . . . . . # increment *esi
|
ff 0/subop/increment 0/mod/indirect 6/rm32/esi . . . . . . # increment *esi
|
||||||
# if (*local-slice->start != '<') goto error2
|
# if (*local-slice->start != '<') goto error2
|
||||||
|
@ -2424,7 +2424,7 @@ $parse-effective-address:check-for-scale:
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
||||||
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
||||||
3d/compare-eax-and 0x3c/imm32/less-than
|
3d/compare-eax-and 0x3c/imm32/less-than
|
||||||
0f 85/jump-if-not-equal $parse-effective-address:error2/disp32
|
0f 85/jump-if-!= $parse-effective-address:error2/disp32
|
||||||
# ++local-slice->start to skip '<'
|
# ++local-slice->start to skip '<'
|
||||||
ff 0/subop/increment 0/mod/indirect 6/rm32/esi . . . . . . # increment *esi
|
ff 0/subop/increment 0/mod/indirect 6/rm32/esi . . . . . . # increment *esi
|
||||||
# skip whitespace
|
# skip whitespace
|
||||||
|
@ -2464,13 +2464,13 @@ $parse-effective-address:scale:
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
||||||
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
||||||
3d/compare-eax-and 0x29/imm32/close-paren
|
3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
74/jump-if-equal $parse-effective-address:end/disp8
|
74/jump-if-= $parse-effective-address:end/disp8
|
||||||
$parse-effective-address:check-for-displacement:
|
$parse-effective-address:check-for-displacement:
|
||||||
# if (*local-slice->start not in '+' '-') goto error3
|
# if (*local-slice->start not in '+' '-') goto error3
|
||||||
3d/compare-eax-and 0x2b/imm32/plus
|
3d/compare-eax-and 0x2b/imm32/plus
|
||||||
74/jump-if-equal $parse-effective-address:displacement/disp8
|
74/jump-if-= $parse-effective-address:displacement/disp8
|
||||||
3d/compare-eax-and 0x2d/imm32/minus
|
3d/compare-eax-and 0x2d/imm32/minus
|
||||||
74/jump-if-equal $parse-effective-address:displacement/disp8
|
74/jump-if-= $parse-effective-address:displacement/disp8
|
||||||
e9/jump $parse-effective-address:error3/disp32
|
e9/jump $parse-effective-address:error3/disp32
|
||||||
$parse-effective-address:displacement:
|
$parse-effective-address:displacement:
|
||||||
# read integer into disp
|
# read integer into disp
|
||||||
|
@ -2498,7 +2498,7 @@ $parse-effective-address:displacement:
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
||||||
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
||||||
3d/compare-eax-and 0x29/imm32/close-paren
|
3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
0f 85/jump-if-not-equal $parse-effective-address:error4/disp32
|
0f 85/jump-if-!= $parse-effective-address:error4/disp32
|
||||||
$parse-effective-address:end:
|
$parse-effective-address:end:
|
||||||
# return base in eax
|
# return base in eax
|
||||||
89/copy 3/mod/direct 0/rm32/eax . . . 7/r32/edi . . # copy edi to eax
|
89/copy 3/mod/direct 0/rm32/eax . . . 7/r32/edi . . # copy edi to eax
|
||||||
|
@ -3156,15 +3156,15 @@ emit-indirect-mode: # out : (addr buffered-file), base : int, index : int, scal
|
||||||
$emit-indirect-mode:check-for-ebp:
|
$emit-indirect-mode:check-for-ebp:
|
||||||
# if (base == 5) goto emit-sib
|
# if (base == 5) goto emit-sib
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 5/imm32 # compare *(ebp+12)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 5/imm32 # compare *(ebp+12)
|
||||||
74/jump-if-equal $emit-indirect-mode:emit-sib/disp8
|
74/jump-if-= $emit-indirect-mode:emit-sib/disp8
|
||||||
$emit-indirect-mode:check-for-esp:
|
$emit-indirect-mode:check-for-esp:
|
||||||
# if (base == 4) goto emit-sib
|
# if (base == 4) goto emit-sib
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 4/imm32 # compare *(ebp+12)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0xc/disp8 4/imm32 # compare *(ebp+12)
|
||||||
74/jump-if-equal $emit-indirect-mode:emit-sib/disp8
|
74/jump-if-= $emit-indirect-mode:emit-sib/disp8
|
||||||
$emit-indirect-mode:check-for-sib:
|
$emit-indirect-mode:check-for-sib:
|
||||||
# if (index == 4/none) goto next check
|
# if (index == 4/none) goto next check
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 4/imm32 # compare *(ebp+16)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0x10/disp8 4/imm32 # compare *(ebp+16)
|
||||||
0f 84/jump-if-equal $emit-indirect-mode:check-for-disp/disp32
|
0f 84/jump-if-= $emit-indirect-mode:check-for-disp/disp32
|
||||||
$emit-indirect-mode:emit-sib:
|
$emit-indirect-mode:emit-sib:
|
||||||
# emit(out, "2/mod/indirect 4/rm32/sib " base "/base " index "/index " scale "/scale " disp "/disp32")
|
# emit(out, "2/mod/indirect 4/rm32/sib " base "/base " index "/index " scale "/scale " disp "/disp32")
|
||||||
# . write-buffered(out, "2/mod/*+disp32 4/rm32/sib ")
|
# . write-buffered(out, "2/mod/*+disp32 4/rm32/sib ")
|
||||||
|
@ -3243,7 +3243,7 @@ $emit-indirect-mode:emit-sib:
|
||||||
$emit-indirect-mode:check-for-disp:
|
$emit-indirect-mode:check-for-disp:
|
||||||
# if (disp == 0) goto next check
|
# if (disp == 0) goto next check
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 0/imm32 # compare *(ebp+24)
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0x18/disp8 0/imm32 # compare *(ebp+24)
|
||||||
74/jump-if-equal $emit-indirect-mode:emit-indirect/disp8
|
74/jump-if-= $emit-indirect-mode:emit-indirect/disp8
|
||||||
$emit-indirect-mode:emit-disp:
|
$emit-indirect-mode:emit-disp:
|
||||||
# emit(out, "2/mod/*+disp32 " base "/rm32 " disp "/disp32")
|
# emit(out, "2/mod/*+disp32 " base "/rm32 " disp "/disp32")
|
||||||
# . write-buffered(out, "2/mod/*+disp32 ")
|
# . write-buffered(out, "2/mod/*+disp32 ")
|
||||||
|
@ -3877,7 +3877,7 @@ disp32-mode?: # in : (addr slice) -> reg/eax : boolean
|
||||||
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
8a/copy-byte 0/mod/indirect 0/rm32/eax . . . 0/r32/AL . . # copy byte at *eax to AL
|
||||||
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
81 4/subop/and 3/mod/direct 0/rm32/eax . . . . . 0xff/imm32 # bitwise and of eax
|
||||||
3d/compare-eax-and 0x28/imm32/open-paren
|
3d/compare-eax-and 0x28/imm32/open-paren
|
||||||
74/jump-if-equal $disp32-mode?:false/disp8
|
74/jump-if-= $disp32-mode?:false/disp8
|
||||||
$disp32-mode?:check-for-register:
|
$disp32-mode?:check-for-register:
|
||||||
# local-slice = next-token-from-slice(local-slice->start, local-slice->end, "/")
|
# local-slice = next-token-from-slice(local-slice->start, local-slice->end, "/")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -3900,7 +3900,7 @@ $disp32-mode?:check-for-register:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 0xc/imm32 # add to esp
|
||||||
# if (eax != 0) return false
|
# if (eax != 0) return false
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
75/jump-if-not-equal $disp32-mode?:false/disp8
|
75/jump-if-!= $disp32-mode?:false/disp8
|
||||||
# return true
|
# return true
|
||||||
b8/copy-to-eax 1/imm32/true
|
b8/copy-to-eax 1/imm32/true
|
||||||
eb/jump $disp32-mode?:end/disp8
|
eb/jump $disp32-mode?:end/disp8
|
||||||
|
@ -3993,14 +3993,14 @@ next-hex-int: # in : (addr slice) -> result/eax
|
||||||
$next-hex-int:positive:
|
$next-hex-int:positive:
|
||||||
# if (*curr == '+') ++curr
|
# if (*curr == '+') ++curr
|
||||||
3d/compare-eax-and 0x2b/imm32/+
|
3d/compare-eax-and 0x2b/imm32/+
|
||||||
75/jump-if-not-equal $next-hex-int:negative/disp8
|
75/jump-if-!= $next-hex-int:negative/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
eb/jump $next-hex-int:skip-whitespace/disp8
|
eb/jump $next-hex-int:skip-whitespace/disp8
|
||||||
$next-hex-int:negative:
|
$next-hex-int:negative:
|
||||||
# else if (*curr == '-') ++curr, negate = true
|
# else if (*curr == '-') ++curr, negate = true
|
||||||
3d/compare-eax-and 0x2d/imm32/-
|
3d/compare-eax-and 0x2d/imm32/-
|
||||||
75/jump-if-not-equal $next-hex-int:skip-whitespace/disp8
|
75/jump-if-!= $next-hex-int:skip-whitespace/disp8
|
||||||
$next-hex-int:need-to-negate:
|
$next-hex-int:need-to-negate:
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
|
@ -4027,24 +4027,24 @@ $next-hex-int:initial-0:
|
||||||
# . if (*curr != '0') jump to loop
|
# . if (*curr != '0') jump to loop
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
3d/compare-eax-and 0x30/imm32/0
|
3d/compare-eax-and 0x30/imm32/0
|
||||||
75/jump-if-not-equal $next-hex-int:loop/disp8
|
75/jump-if-!= $next-hex-int:loop/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
$next-hex-int:initial-0x:
|
$next-hex-int:initial-0x:
|
||||||
# . if (curr >= in->end) return result
|
# . if (curr >= in->end) return result
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $next-hex-int:end/disp8
|
73/jump-if-addr>= $next-hex-int:end/disp8
|
||||||
# . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again
|
# . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
3d/compare-eax-and 0x78/imm32/x
|
3d/compare-eax-and 0x78/imm32/x
|
||||||
75/jump-if-not-equal $next-hex-int:loop/disp8
|
75/jump-if-!= $next-hex-int:loop/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
$next-hex-int:loop:
|
$next-hex-int:loop:
|
||||||
# if (curr >= in->end) break
|
# if (curr >= in->end) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $next-hex-int:break/disp8
|
73/jump-if-addr>= $next-hex-int:break/disp8
|
||||||
# if (!is-hex-digit?(*curr)) break
|
# if (!is-hex-digit?(*curr)) break
|
||||||
# . eax = *curr
|
# . eax = *curr
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
|
@ -4057,7 +4057,7 @@ $next-hex-int:loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax == false) break
|
# . if (eax == false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $next-hex-int:break/disp8
|
74/jump-if-= $next-hex-int:break/disp8
|
||||||
# eax = from-hex-char(*curr)
|
# eax = from-hex-char(*curr)
|
||||||
# . . copy arg to eax
|
# . . copy arg to eax
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
|
@ -4073,7 +4073,7 @@ $next-hex-int:loop:
|
||||||
$next-hex-int:break:
|
$next-hex-int:break:
|
||||||
# if (negate?) result = -result
|
# if (negate?) result = -result
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32/false # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32/false # compare ebx
|
||||||
74/jump-if-equal $next-hex-int:end/disp8
|
74/jump-if-= $next-hex-int:end/disp8
|
||||||
$next-hex-int:negate:
|
$next-hex-int:negate:
|
||||||
f7 3/subop/negate 3/mod/direct 7/rm32/edi . . . . . . # negate edi
|
f7 3/subop/negate 3/mod/direct 7/rm32/edi . . . . . . # negate edi
|
||||||
$next-hex-int:end:
|
$next-hex-int:end:
|
||||||
|
@ -4410,24 +4410,24 @@ $next-positive-hex-int:initial-0:
|
||||||
# . if (*curr != '0') jump to loop
|
# . if (*curr != '0') jump to loop
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
3d/compare-eax-and 0x30/imm32/0
|
3d/compare-eax-and 0x30/imm32/0
|
||||||
75/jump-if-not-equal $next-positive-hex-int:loop/disp8
|
75/jump-if-!= $next-positive-hex-int:loop/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
$next-positive-hex-int:initial-0x:
|
$next-positive-hex-int:initial-0x:
|
||||||
# . if (curr >= in->end) return result
|
# . if (curr >= in->end) return result
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $next-positive-hex-int:end/disp8
|
73/jump-if-addr>= $next-positive-hex-int:end/disp8
|
||||||
# . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again
|
# . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again
|
||||||
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
31/xor 3/mod/direct 0/rm32/eax . . . 0/r32/eax . . # clear eax
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
3d/compare-eax-and 0x78/imm32/x
|
3d/compare-eax-and 0x78/imm32/x
|
||||||
75/jump-if-not-equal $next-positive-hex-int:loop/disp8
|
75/jump-if-!= $next-positive-hex-int:loop/disp8
|
||||||
# . ++curr
|
# . ++curr
|
||||||
41/increment-ecx
|
41/increment-ecx
|
||||||
$next-positive-hex-int:loop:
|
$next-positive-hex-int:loop:
|
||||||
# if (curr >= in->end) break
|
# if (curr >= in->end) break
|
||||||
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
39/compare 3/mod/direct 1/rm32/ecx . . . 2/r32/edx . . # compare ecx with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $next-positive-hex-int:end/disp8
|
73/jump-if-addr>= $next-positive-hex-int:end/disp8
|
||||||
# if (!is-hex-digit?(*curr)) break
|
# if (!is-hex-digit?(*curr)) break
|
||||||
# . eax = *curr
|
# . eax = *curr
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
|
@ -4440,7 +4440,7 @@ $next-positive-hex-int:loop:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax == false) break
|
# . if (eax == false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $next-positive-hex-int:end/disp8
|
74/jump-if-= $next-positive-hex-int:end/disp8
|
||||||
# eax = from-hex-char(*curr)
|
# eax = from-hex-char(*curr)
|
||||||
# . . copy arg to eax
|
# . . copy arg to eax
|
||||||
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
8a/copy-byte 0/mod/indirect 1/rm32/ecx . . . 0/r32/AL . . # copy byte at *ecx to AL
|
||||||
|
|
|
@ -64,7 +64,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto interactive
|
# if (argc <= 1) goto interactive
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $subx-survey-main:interactive/disp8
|
7e/jump-if-<= $subx-survey-main:interactive/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
# if (!kernel-string-equal?(argv[1], "test")) goto interactive
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -76,7 +76,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto interactive
|
# . if (eax == false) goto interactive
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-survey-main:interactive/disp8
|
74/jump-if-= $subx-survey-main:interactive/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -709,7 +709,7 @@ $compute-offsets:line-loop:
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
8b/copy 0/mod/indirect 1/rm32/ecx . . . 0/r32/eax . . # copy *ecx to eax
|
8b/copy 0/mod/indirect 1/rm32/ecx . . . 0/r32/eax . . # copy *ecx to eax
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 84/jump-if-equal $compute-offsets:break-line-loop/disp32
|
0f 84/jump-if-= $compute-offsets:break-line-loop/disp32
|
||||||
#? # dump line {{{
|
#? # dump line {{{
|
||||||
#? # . write(2/stderr, "LL: ")
|
#? # . write(2/stderr, "LL: ")
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
|
@ -793,7 +793,7 @@ $compute-offsets:word-loop:
|
||||||
#? 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
#? 81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
#? # . if (curr-segment-name == 0) print curr-segment-name
|
#? # . if (curr-segment-name == 0) print curr-segment-name
|
||||||
#? 81 7/subop/compare 3/mod/direct 6/rm32/esi . . . . . 0/imm32 # compare esi
|
#? 81 7/subop/compare 3/mod/direct 6/rm32/esi . . . . . 0/imm32 # compare esi
|
||||||
#? 74/jump-if-equal $compute-offsets:case-empty/disp8
|
#? 74/jump-if-= $compute-offsets:case-empty/disp8
|
||||||
#? # . write(2/stderr, "segment at start of word: ")
|
#? # . write(2/stderr, "segment at start of word: ")
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
#? 68/push "segment at start of word: "/imm32
|
#? 68/push "segment at start of word: "/imm32
|
||||||
|
@ -835,7 +835,7 @@ $compute-offsets:case-empty:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) break
|
# . if (eax != false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $compute-offsets:line-loop/disp32
|
0f 85/jump-if-!= $compute-offsets:line-loop/disp32
|
||||||
$compute-offsets:case-comment:
|
$compute-offsets:case-comment:
|
||||||
# if slice-starts-with?(word-slice, "#") continue
|
# if slice-starts-with?(word-slice, "#") continue
|
||||||
68/push "#"/imm32
|
68/push "#"/imm32
|
||||||
|
@ -845,7 +845,7 @@ $compute-offsets:case-comment:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) break
|
# . if (eax != false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $compute-offsets:line-loop/disp32
|
0f 85/jump-if-!= $compute-offsets:line-loop/disp32
|
||||||
$compute-offsets:case-segment-header:
|
$compute-offsets:case-segment-header:
|
||||||
# if (!slice-equal?(word-slice/edx, "==")) goto next case
|
# if (!slice-equal?(word-slice/edx, "==")) goto next case
|
||||||
# . eax = slice-equal?(word-slice/edx, "==")
|
# . eax = slice-equal?(word-slice/edx, "==")
|
||||||
|
@ -856,10 +856,10 @@ $compute-offsets:case-segment-header:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next case
|
# . if (eax == false) goto next case
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 84/jump-if-equal $compute-offsets:case-label/disp32
|
0f 84/jump-if-= $compute-offsets:case-label/disp32
|
||||||
# if (curr-segment-name == 0) goto construct-next-segment
|
# if (curr-segment-name == 0) goto construct-next-segment
|
||||||
81 7/subop/compare 3/mod/direct 6/rm32/esi . . . . . 0/imm32 # compare esi
|
81 7/subop/compare 3/mod/direct 6/rm32/esi . . . . . 0/imm32 # compare esi
|
||||||
74/jump-if-equal $compute-offsets:construct-next-segment/disp8
|
74/jump-if-= $compute-offsets:construct-next-segment/disp8
|
||||||
# seg/eax = get-or-insert(segments, curr-segment-name, row-size=16)
|
# seg/eax = get-or-insert(segments, curr-segment-name, row-size=16)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push 0x10/imm32/row-size
|
68/push 0x10/imm32/row-size
|
||||||
|
@ -903,7 +903,7 @@ $compute-offsets:construct-next-segment:
|
||||||
#? # dump curr-segment-name if not null (clobbering eax) {{{
|
#? # dump curr-segment-name if not null (clobbering eax) {{{
|
||||||
#? # . if (curr-segment-name == 0) goto update-curr-segment-name
|
#? # . if (curr-segment-name == 0) goto update-curr-segment-name
|
||||||
#? 81 7/subop/compare 3/mod/direct 6/rm32/esi . . . . . 0/imm32 # compare esi
|
#? 81 7/subop/compare 3/mod/direct 6/rm32/esi . . . . . 0/imm32 # compare esi
|
||||||
#? 74/jump-if-equal $compute-offsets:update-curr-segment-name/disp8
|
#? 74/jump-if-= $compute-offsets:update-curr-segment-name/disp8
|
||||||
#? # . write(2/stderr, "setting segment to: ")
|
#? # . write(2/stderr, "setting segment to: ")
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
#? 68/push "setting segment to: "/imm32
|
#? 68/push "setting segment to: "/imm32
|
||||||
|
@ -960,7 +960,7 @@ $compute-offsets:update-curr-segment-name:
|
||||||
# if empty?(curr-segment-name) abort
|
# if empty?(curr-segment-name) abort
|
||||||
# . if (eax == 0) abort
|
# . if (eax == 0) abort
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 84/jump-if-equal $compute-offsets:abort/disp32
|
0f 84/jump-if-= $compute-offsets:abort/disp32
|
||||||
# next-word(line, segment-tmp)
|
# next-word(line, segment-tmp)
|
||||||
68/push compute-offsets:segment-tmp/imm32
|
68/push compute-offsets:segment-tmp/imm32
|
||||||
51/push-ecx
|
51/push-ecx
|
||||||
|
@ -975,7 +975,7 @@ $compute-offsets:update-curr-segment-name:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) abort
|
# . if (eax != false) abort
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $compute-offsets:abort/disp32
|
0f 85/jump-if-!= $compute-offsets:abort/disp32
|
||||||
# seg/ebx = get-or-insert(segments, curr-segment-name, row-size=16)
|
# seg/ebx = get-or-insert(segments, curr-segment-name, row-size=16)
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push 0x10/imm32/row-size
|
68/push 0x10/imm32/row-size
|
||||||
|
@ -1024,7 +1024,7 @@ $compute-offsets:case-label:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax == false) goto next case
|
# . if (eax == false) goto next case
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $compute-offsets:case-default/disp8
|
74/jump-if-= $compute-offsets:case-default/disp8
|
||||||
# strip trailing ':' from word-slice
|
# strip trailing ':' from word-slice
|
||||||
ff 1/subop/decrement 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 . # decrement *(edx+4)
|
ff 1/subop/decrement 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 . # decrement *(edx+4)
|
||||||
# x/eax = leaky-get-or-insert-slice(labels, word-slice, row-size=16)
|
# x/eax = leaky-get-or-insert-slice(labels, word-slice, row-size=16)
|
||||||
|
@ -1428,7 +1428,7 @@ compute-addresses: # segments : (addr stream {string, segment-info}), labels :
|
||||||
$compute-addresses:segment-loop:
|
$compute-addresses:segment-loop:
|
||||||
# if (srow >= max) break
|
# if (srow >= max) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
||||||
73/jump-if-greater-or-equal-unsigned $compute-addresses:segment-break/disp8
|
73/jump-if-addr>= $compute-addresses:segment-break/disp8
|
||||||
# srow->file-offset += starting-offset
|
# srow->file-offset += starting-offset
|
||||||
01/add 1/mod/*+disp8 0/rm32/eax . . . 7/r32/edi 8/disp8 . # add edi to *(eax+8)
|
01/add 1/mod/*+disp8 0/rm32/eax . . . 7/r32/edi 8/disp8 . # add edi to *(eax+8)
|
||||||
# clear last 12 bits of srow->address for p_align=0x1000
|
# clear last 12 bits of srow->address for p_align=0x1000
|
||||||
|
@ -1495,7 +1495,7 @@ $compute-addresses:segment-break:
|
||||||
$compute-addresses:label-loop:
|
$compute-addresses:label-loop:
|
||||||
# if (lrow >= max) break
|
# if (lrow >= max) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
||||||
0f 83/jump-if-greater-or-equal-unsigned $compute-addresses:end/disp32
|
0f 83/jump-if-addr>= $compute-addresses:end/disp32
|
||||||
#? # dump lrow->key {{{
|
#? # dump lrow->key {{{
|
||||||
#? # . write(2/stderr, "label: ")
|
#? # . write(2/stderr, "label: ")
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
|
@ -2055,7 +2055,7 @@ $emit-segments:line-loop:
|
||||||
$emit-segments:check-for-end-of-input:
|
$emit-segments:check-for-end-of-input:
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
||||||
0f 84/jump-if-equal $emit-segments:end/disp32
|
0f 84/jump-if-= $emit-segments:end/disp32
|
||||||
# offset-of-next-instruction += num-bytes(line)
|
# offset-of-next-instruction += num-bytes(line)
|
||||||
# . eax = num-bytes(line)
|
# . eax = num-bytes(line)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -2119,7 +2119,7 @@ $emit-segments:check-for-end-of-line:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != 0) break
|
# . if (eax != 0) break
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
0f 85/jump-if-not-equal $emit-segments:next-line/disp32
|
0f 85/jump-if-!= $emit-segments:next-line/disp32
|
||||||
$emit-segments:check-for-comment:
|
$emit-segments:check-for-comment:
|
||||||
# if (slice-starts-with?(word-slice, "#")) break
|
# if (slice-starts-with?(word-slice, "#")) break
|
||||||
# . start/esi = word-slice->start
|
# . start/esi = word-slice->start
|
||||||
|
@ -2129,7 +2129,7 @@ $emit-segments:check-for-comment:
|
||||||
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
8a/copy-byte 0/mod/indirect 6/rm32/esi . . . 0/r32/AL . . # copy byte at *esi to AL
|
||||||
# . if (eax == '#') break
|
# . if (eax == '#') break
|
||||||
3d/compare-eax-and 0x23/imm32/hash
|
3d/compare-eax-and 0x23/imm32/hash
|
||||||
0f 84/jump-if-equal $emit-segments:next-line/disp32
|
0f 84/jump-if-= $emit-segments:next-line/disp32
|
||||||
$emit-segments:check-for-label:
|
$emit-segments:check-for-label:
|
||||||
# if is-label?(word-slice) break
|
# if is-label?(word-slice) break
|
||||||
# . eax = is-label?(word-slice)
|
# . eax = is-label?(word-slice)
|
||||||
|
@ -2141,7 +2141,7 @@ $emit-segments:check-for-label:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax != false) break
|
# . if (eax != false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-segments:line-loop/disp32
|
0f 85/jump-if-!= $emit-segments:line-loop/disp32
|
||||||
$emit-segments:check-for-segment-header:
|
$emit-segments:check-for-segment-header:
|
||||||
# if (slice-equal?(word-slice, "==")) break
|
# if (slice-equal?(word-slice, "==")) break
|
||||||
# . eax = slice-equal?(word-slice, "==")
|
# . eax = slice-equal?(word-slice, "==")
|
||||||
|
@ -2154,7 +2154,7 @@ $emit-segments:check-for-segment-header:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) break
|
# . if (eax != false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-segments:line-loop/disp32
|
0f 85/jump-if-!= $emit-segments:line-loop/disp32
|
||||||
$emit-segments:2-character:
|
$emit-segments:2-character:
|
||||||
# if (length(word-slice) != 2) goto next check
|
# if (length(word-slice) != 2) goto next check
|
||||||
# . eax = length(word-slice)
|
# . eax = length(word-slice)
|
||||||
|
@ -2162,7 +2162,7 @@ $emit-segments:2-character:
|
||||||
2b/subtract 0/mod/indirect 2/rm32/edx . . . 0/r32/eax . . # subtract *edx from eax
|
2b/subtract 0/mod/indirect 2/rm32/edx . . . 0/r32/eax . . # subtract *edx from eax
|
||||||
# . if (eax != 2) goto next check
|
# . if (eax != 2) goto next check
|
||||||
3d/compare-eax-and 2/imm32
|
3d/compare-eax-and 2/imm32
|
||||||
75/jump-if-not-equal $emit-segments:check-metadata/disp8
|
75/jump-if-!= $emit-segments:check-metadata/disp8
|
||||||
# write-slice-buffered(out, word-slice)
|
# write-slice-buffered(out, word-slice)
|
||||||
# . . push args
|
# . . push args
|
||||||
52/push-edx
|
52/push-edx
|
||||||
|
@ -2277,7 +2277,7 @@ $emit-segments:check-global-variable:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) goto code label checks
|
# . if (eax != false) goto code label checks
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-segments:check-code-label-for-imm8/disp32
|
0f 85/jump-if-!= $emit-segments:check-code-label-for-imm8/disp32
|
||||||
$emit-segments:check-global-variable-for-disp8:
|
$emit-segments:check-global-variable-for-disp8:
|
||||||
# if has-metadata?(word-slice, "disp8") abort
|
# if has-metadata?(word-slice, "disp8") abort
|
||||||
# . eax = has-metadata?(word-slice, "disp8")
|
# . eax = has-metadata?(word-slice, "disp8")
|
||||||
|
@ -2290,7 +2290,7 @@ $emit-segments:check-global-variable-for-disp8:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) abort
|
# . if (eax != false) abort
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-segments:global-variable-abort/disp32
|
0f 85/jump-if-!= $emit-segments:global-variable-abort/disp32
|
||||||
$emit-segments:check-global-variable-for-imm8:
|
$emit-segments:check-global-variable-for-imm8:
|
||||||
# if has-metadata?(word-slice, "imm8") abort
|
# if has-metadata?(word-slice, "imm8") abort
|
||||||
# . eax = has-metadata?(word-slice, "imm8")
|
# . eax = has-metadata?(word-slice, "imm8")
|
||||||
|
@ -2303,7 +2303,7 @@ $emit-segments:check-global-variable-for-imm8:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) abort
|
# . if (eax != false) abort
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-segments:global-variable-abort/disp32
|
0f 85/jump-if-!= $emit-segments:global-variable-abort/disp32
|
||||||
$emit-segments:emit-global-variable:
|
$emit-segments:emit-global-variable:
|
||||||
# emit-hex(out, info->address, 4)
|
# emit-hex(out, info->address, 4)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -2328,7 +2328,7 @@ $emit-segments:check-code-label-for-imm8:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax != false) abort
|
# . if (eax != false) abort
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 85/jump-if-not-equal $emit-segments:imm8-abort/disp32
|
0f 85/jump-if-!= $emit-segments:imm8-abort/disp32
|
||||||
$emit-segments:check-code-label-for-imm32:
|
$emit-segments:check-code-label-for-imm32:
|
||||||
# if (!has-metadata?(word-slice, "imm32")) goto next check
|
# if (!has-metadata?(word-slice, "imm32")) goto next check
|
||||||
# . eax = has-metadata?(edx, "imm32")
|
# . eax = has-metadata?(edx, "imm32")
|
||||||
|
@ -2341,7 +2341,7 @@ $emit-segments:check-code-label-for-imm32:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32
|
3d/compare-eax-and 0/imm32
|
||||||
74/jump-if-equal $emit-segments:check-code-label-for-disp8/disp8
|
74/jump-if-= $emit-segments:check-code-label-for-disp8/disp8
|
||||||
#? # dump info->address {{{
|
#? # dump info->address {{{
|
||||||
#? # . write(2/stderr, "info->address: ")
|
#? # . write(2/stderr, "info->address: ")
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
|
@ -2399,7 +2399,7 @@ $emit-segments:check-code-label-for-disp8:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-segments:check-code-label-for-disp32/disp8
|
74/jump-if-= $emit-segments:check-code-label-for-disp32/disp8
|
||||||
$emit-segments:emit-code-label-disp8:
|
$emit-segments:emit-code-label-disp8:
|
||||||
# emit-hex(out, info->offset - offset-of-next-instruction, 1)
|
# emit-hex(out, info->offset - offset-of-next-instruction, 1)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -2426,7 +2426,7 @@ $emit-segments:check-code-label-for-disp32:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) abort
|
# . if (eax == false) abort
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
0f 84/jump-if-equal $emit-segments:abort/disp32
|
0f 84/jump-if-= $emit-segments:abort/disp32
|
||||||
$emit-segments:emit-code-label-disp32:
|
$emit-segments:emit-code-label-disp32:
|
||||||
# emit-hex(out, info->offset - offset-of-next-instruction, 4)
|
# emit-hex(out, info->offset - offset-of-next-instruction, 4)
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -3218,7 +3218,7 @@ emit-headers: # out : (addr buffered-file), segments : (addr stream {string, se
|
||||||
$emit-headers:loop:
|
$emit-headers:loop:
|
||||||
# if (curr-segment >= max) break
|
# if (curr-segment >= max) break
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
39/compare 3/mod/direct 0/rm32/eax . . . 1/r32/ecx . . # compare eax with ecx
|
||||||
0f 83/jump-if-greater-or-equal-unsigned $emit-headers:end/disp32
|
0f 83/jump-if-addr>= $emit-headers:end/disp32
|
||||||
#? # dump curr-segment->name {{{
|
#? # dump curr-segment->name {{{
|
||||||
#? # . write(2/stderr, "about to emit ph entry: segment->name: ")
|
#? # . write(2/stderr, "about to emit ph entry: segment->name: ")
|
||||||
#? # . . push args
|
#? # . . push args
|
||||||
|
@ -3433,7 +3433,7 @@ emit-elf-program-header-entry: # out : (addr buffered-file), curr-segment : (ad
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto next check
|
# . if (eax == false) goto next check
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $emit-elf-program-header-entry:data/disp8
|
74/jump-if-= $emit-elf-program-header-entry:data/disp8
|
||||||
# *$Elf_p_flags = r-x
|
# *$Elf_p_flags = r-x
|
||||||
c7 0/subop/copy 0/mod/indirect 5/rm32/.disp32 . . . $Elf_p_flags/disp32 5/imm32 # copy to *$Elf_p_flags
|
c7 0/subop/copy 0/mod/indirect 5/rm32/.disp32 . . . $Elf_p_flags/disp32 5/imm32 # copy to *$Elf_p_flags
|
||||||
eb/jump $emit-elf-program-header-entry:really-emit/disp8
|
eb/jump $emit-elf-program-header-entry:really-emit/disp8
|
||||||
|
@ -3491,7 +3491,7 @@ stream-add4: # in : (addr stream byte), key : addr, val1 : addr, val2 : addr, v
|
||||||
8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 2/index/edx . 2/r32/edx 0xc/disp8 . # copy esi+edx+12 to edx
|
8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/esi 2/index/edx . 2/r32/edx 0xc/disp8 . # copy esi+edx+12 to edx
|
||||||
# if (curr >= max) abort
|
# if (curr >= max) abort
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax with edx
|
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $stream-add4:abort/disp8
|
73/jump-if-addr>= $stream-add4:abort/disp8
|
||||||
# *curr = key
|
# *curr = key
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 0xc/disp8 . # copy *(ebp+12) to ecx
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 0xc/disp8 . # copy *(ebp+12) to ecx
|
||||||
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
||||||
|
@ -3499,7 +3499,7 @@ stream-add4: # in : (addr stream byte), key : addr, val1 : addr, val2 : addr, v
|
||||||
05/add-to-eax 4/imm32
|
05/add-to-eax 4/imm32
|
||||||
# if (curr >= max) abort
|
# if (curr >= max) abort
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax with edx
|
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $stream-add4:abort/disp8
|
73/jump-if-addr>= $stream-add4:abort/disp8
|
||||||
# *curr = val1
|
# *curr = val1
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 0x10/disp8 . # copy *(ebp+16) to ecx
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 0x10/disp8 . # copy *(ebp+16) to ecx
|
||||||
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
||||||
|
@ -3507,7 +3507,7 @@ stream-add4: # in : (addr stream byte), key : addr, val1 : addr, val2 : addr, v
|
||||||
05/add-to-eax 4/imm32
|
05/add-to-eax 4/imm32
|
||||||
# if (curr >= max) abort
|
# if (curr >= max) abort
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax with edx
|
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $stream-add4:abort/disp8
|
73/jump-if-addr>= $stream-add4:abort/disp8
|
||||||
# *curr = val2
|
# *curr = val2
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 0x14/disp8 . # copy *(ebp+20) to ecx
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 0x14/disp8 . # copy *(ebp+20) to ecx
|
||||||
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
||||||
|
@ -3515,7 +3515,7 @@ stream-add4: # in : (addr stream byte), key : addr, val1 : addr, val2 : addr, v
|
||||||
05/add-to-eax 4/imm32
|
05/add-to-eax 4/imm32
|
||||||
# if (curr >= max) abort
|
# if (curr >= max) abort
|
||||||
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax with edx
|
39/compare 3/mod/direct 0/rm32/eax . . . 2/r32/edx . . # compare eax with edx
|
||||||
73/jump-if-greater-or-equal-unsigned $stream-add4:abort/disp8
|
73/jump-if-addr>= $stream-add4:abort/disp8
|
||||||
# *curr = val3
|
# *curr = val3
|
||||||
8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 0x18/disp8 . # copy *(ebp+24) to ecx
|
8b/copy 1/mod/*+disp8 5/rm32/ebp . . 1/r32/ecx 0x18/disp8 . # copy *(ebp+24) to ecx
|
||||||
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
89/copy 0/mod/indirect 0/rm32/eax . . . 1/r32/ecx . . # copy ecx to *eax
|
||||||
|
@ -4251,7 +4251,7 @@ $num-bytes:check0:
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
# . restore result now that ZF is set
|
# . restore result now that ZF is set
|
||||||
58/pop-to-eax
|
58/pop-to-eax
|
||||||
75/jump-if-not-equal $num-bytes:end/disp8
|
75/jump-if-!= $num-bytes:end/disp8
|
||||||
$num-bytes:check-for-comment:
|
$num-bytes:check-for-comment:
|
||||||
# if (slice-starts-with?(word-slice, "#")) break
|
# if (slice-starts-with?(word-slice, "#")) break
|
||||||
# . start/edx = word-slice->start
|
# . start/edx = word-slice->start
|
||||||
|
@ -4261,7 +4261,7 @@ $num-bytes:check-for-comment:
|
||||||
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 3/r32/BL . . # copy byte at *edx to BL
|
8a/copy-byte 0/mod/indirect 2/rm32/edx . . . 3/r32/BL . . # copy byte at *edx to BL
|
||||||
# . if (ebx == '#') break
|
# . if (ebx == '#') break
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x23/imm32/hash # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x23/imm32/hash # compare ebx
|
||||||
74/jump-if-equal $num-bytes:end/disp8
|
74/jump-if-= $num-bytes:end/disp8
|
||||||
$num-bytes:check-for-label:
|
$num-bytes:check-for-label:
|
||||||
# if (slice-ends-with?(word-slice, ":")) break
|
# if (slice-ends-with?(word-slice, ":")) break
|
||||||
# . end/edx = word-slice->end
|
# . end/edx = word-slice->end
|
||||||
|
@ -4271,7 +4271,7 @@ $num-bytes:check-for-label:
|
||||||
8a/copy-byte 1/mod/*+disp8 2/rm32/edx . . . 3/r32/BL -1/disp8 . # copy byte at *ecx to BL
|
8a/copy-byte 1/mod/*+disp8 2/rm32/edx . . . 3/r32/BL -1/disp8 . # copy byte at *ecx to BL
|
||||||
# . if (ebx == ':') break
|
# . if (ebx == ':') break
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x3a/imm32/colon # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0x3a/imm32/colon # compare ebx
|
||||||
74/jump-if-equal $num-bytes:end/disp8
|
74/jump-if-= $num-bytes:end/disp8
|
||||||
$num-bytes:check-for-segment-header:
|
$num-bytes:check-for-segment-header:
|
||||||
# if (slice-equal?(word-slice, "==")) break
|
# if (slice-equal?(word-slice, "==")) break
|
||||||
# . push result
|
# . push result
|
||||||
|
@ -4288,7 +4288,7 @@ $num-bytes:check-for-segment-header:
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
# . restore result now that ZF is set
|
# . restore result now that ZF is set
|
||||||
58/pop-to-eax
|
58/pop-to-eax
|
||||||
75/jump-if-not-equal $num-bytes:end/disp8
|
75/jump-if-!= $num-bytes:end/disp8
|
||||||
$num-bytes:loop-body:
|
$num-bytes:loop-body:
|
||||||
# result += compute-width-of-slice(word-slice)
|
# result += compute-width-of-slice(word-slice)
|
||||||
# . copy result to edx
|
# . copy result to edx
|
||||||
|
|
|
@ -33,7 +33,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
# - if argc > 1 and argv[1] == "test", then return run_tests()
|
||||||
# if (argc <= 1) goto run-main
|
# if (argc <= 1) goto run-main
|
||||||
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp . . . . 0/disp8 1/imm32 # compare *ebp
|
||||||
7e/jump-if-lesser-or-equal $subx-tests-main:interactive/disp8
|
7e/jump-if-<= $subx-tests-main:interactive/disp8
|
||||||
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
# if (!kernel-string-equal?(argv[1], "test")) goto run-main
|
||||||
# . eax = kernel-string-equal?(argv[1], "test")
|
# . eax = kernel-string-equal?(argv[1], "test")
|
||||||
# . . push args
|
# . . push args
|
||||||
|
@ -45,7 +45,7 @@ Entry: # run tests if necessary, convert stdin if not
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) goto run-main
|
# . if (eax == false) goto run-main
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-tests-main:interactive/disp8
|
74/jump-if-= $subx-tests-main:interactive/disp8
|
||||||
# run-tests()
|
# run-tests()
|
||||||
e8/call run-tests/disp32
|
e8/call run-tests/disp32
|
||||||
# syscall(exit, *Num-test-failures)
|
# syscall(exit, *Num-test-failures)
|
||||||
|
@ -160,7 +160,7 @@ $subx-gen-run-tests:loop:
|
||||||
$subx-gen-run-tests:check0:
|
$subx-gen-run-tests:check0:
|
||||||
# if (line->write == 0) break
|
# if (line->write == 0) break
|
||||||
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
81 7/subop/compare 0/mod/indirect 1/rm32/ecx . . . . . 0/imm32 # compare *ecx
|
||||||
0f 84/jump-if-equal $subx-gen-run-tests:break/disp32
|
0f 84/jump-if-= $subx-gen-run-tests:break/disp32
|
||||||
# next-word(line, word-slice)
|
# next-word(line, word-slice)
|
||||||
# . . push args
|
# . . push args
|
||||||
52/push-edx
|
52/push-edx
|
||||||
|
@ -180,7 +180,7 @@ $subx-gen-run-tests:check-for-label:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 4/imm32 # add to esp
|
||||||
# . if (eax == false) continue
|
# . if (eax == false) continue
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-gen-run-tests:continue/disp8
|
74/jump-if-= $subx-gen-run-tests:continue/disp8
|
||||||
$subx-gen-run-tests:check-label-prefix:
|
$subx-gen-run-tests:check-label-prefix:
|
||||||
# strip trailing ':' from word-slice
|
# strip trailing ':' from word-slice
|
||||||
ff 1/subop/decrement 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 . # decrement *(edx+4)
|
ff 1/subop/decrement 1/mod/*+disp8 2/rm32/edx . . . . 4/disp8 . # decrement *(edx+4)
|
||||||
|
@ -194,7 +194,7 @@ $subx-gen-run-tests:check-label-prefix:
|
||||||
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
81 0/subop/add 3/mod/direct 4/rm32/esp . . . . . 8/imm32 # add to esp
|
||||||
# . if (eax == false) break
|
# . if (eax == false) break
|
||||||
3d/compare-eax-and 0/imm32/false
|
3d/compare-eax-and 0/imm32/false
|
||||||
74/jump-if-equal $subx-gen-run-tests:continue/disp8
|
74/jump-if-= $subx-gen-run-tests:continue/disp8
|
||||||
$subx-gen-run-tests:call-test-function:
|
$subx-gen-run-tests:call-test-function:
|
||||||
# tests-found? = true
|
# tests-found? = true
|
||||||
bb/copy-to-ebx 1/imm32/true
|
bb/copy-to-ebx 1/imm32/true
|
||||||
|
@ -243,7 +243,7 @@ $subx-gen-run-tests:continue:
|
||||||
$subx-gen-run-tests:break:
|
$subx-gen-run-tests:break:
|
||||||
# if (!tests-found?) goto end
|
# if (!tests-found?) goto end
|
||||||
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32/false # compare ebx
|
81 7/subop/compare 3/mod/direct 3/rm32/ebx . . . . . 0/imm32/false # compare ebx
|
||||||
74/jump-if-equal $subx-gen-run-tests:end/disp8
|
74/jump-if-= $subx-gen-run-tests:end/disp8
|
||||||
# write(new-code-segment, " c3/return\n")
|
# write(new-code-segment, " c3/return\n")
|
||||||
# . . push args
|
# . . push args
|
||||||
68/push " c3/return\n"/imm32
|
68/push " c3/return\n"/imm32
|
||||||
|
|
|
@ -93,7 +93,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L34" class="LineNr">34 </span> cd/syscall 0x80/imm8
|
<span id="L34" class="LineNr">34 </span> cd/syscall 0x80/imm8
|
||||||
<span id="L35" class="LineNr">35 </span> <span class="subxComment"># if (eax < 0) abort</span>
|
<span id="L35" class="LineNr">35 </span> <span class="subxComment"># if (eax < 0) abort</span>
|
||||||
<span id="L36" class="LineNr">36 </span> 3d/compare-eax-with 0/imm32
|
<span id="L36" class="LineNr">36 </span> 3d/compare-eax-with 0/imm32
|
||||||
<span id="L37" class="LineNr">37 </span> 0f 8c/jump-if-lesser $_write:abort/disp32
|
<span id="L37" class="LineNr">37 </span> 0f 8c/jump-if-< $_write:abort/disp32
|
||||||
<span id="L38" class="LineNr">38 </span><span class="Constant">$_write:end</span>:
|
<span id="L38" class="LineNr">38 </span><span class="Constant">$_write:end</span>:
|
||||||
<span id="L39" class="LineNr">39 </span> <span class="subxS1Comment"># . restore registers</span>
|
<span id="L39" class="LineNr">39 </span> <span class="subxS1Comment"># . restore registers</span>
|
||||||
<span id="L40" class="LineNr">40 </span> 5b/pop-to-ebx
|
<span id="L40" class="LineNr">40 </span> 5b/pop-to-ebx
|
||||||
|
|
|
@ -140,17 +140,17 @@ if ('onhashchange' in window) {
|
||||||
<span id="L78" class="LineNr"> 78 </span><span class="Constant">$kernel-string-equal?:loop</span>:
|
<span id="L78" class="LineNr"> 78 </span><span class="Constant">$kernel-string-equal?:loop</span>:
|
||||||
<span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># if (i >= n) break</span>
|
<span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># if (i >= n) break</span>
|
||||||
<span id="L80" class="LineNr"> 80 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L80" class="LineNr"> 80 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L81" class="LineNr"> 81 </span> 7d/jump-if-greater-or-equal $kernel-string-equal?:<span class="Constant">break</span>/disp8
|
<span id="L81" class="LineNr"> 81 </span> 7d/jump-if->= $kernel-string-equal?:<span class="Constant">break</span>/disp8
|
||||||
<span id="L82" class="LineNr"> 82 </span> <span class="subxComment"># c1 = *s1</span>
|
<span id="L82" class="LineNr"> 82 </span> <span class="subxComment"># c1 = *s1</span>
|
||||||
<span id="L83" class="LineNr"> 83 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span>
|
<span id="L83" class="LineNr"> 83 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span>
|
||||||
<span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># c2 = *s2</span>
|
<span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># c2 = *s2</span>
|
||||||
<span id="L85" class="LineNr"> 85 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to BL</span>
|
<span id="L85" class="LineNr"> 85 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to BL</span>
|
||||||
<span id="L86" class="LineNr"> 86 </span> <span class="subxComment"># if (c1 == 0) return false</span>
|
<span id="L86" class="LineNr"> 86 </span> <span class="subxComment"># if (c1 == 0) return false</span>
|
||||||
<span id="L87" class="LineNr"> 87 </span> 3d/compare-eax-and 0/imm32
|
<span id="L87" class="LineNr"> 87 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L88" class="LineNr"> 88 </span> 74/jump-if-equal $kernel-string-equal?:false/disp8
|
<span id="L88" class="LineNr"> 88 </span> 74/jump-if-= $kernel-string-equal?:false/disp8
|
||||||
<span id="L89" class="LineNr"> 89 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
<span id="L89" class="LineNr"> 89 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
||||||
<span id="L90" class="LineNr"> 90 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
<span id="L90" class="LineNr"> 90 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
||||||
<span id="L91" class="LineNr"> 91 </span> 75/jump-if-not-equal $kernel-string-equal?:false/disp8
|
<span id="L91" class="LineNr"> 91 </span> 75/jump-if-!= $kernel-string-equal?:false/disp8
|
||||||
<span id="L92" class="LineNr"> 92 </span> <span class="subxComment"># ++i</span>
|
<span id="L92" class="LineNr"> 92 </span> <span class="subxComment"># ++i</span>
|
||||||
<span id="L93" class="LineNr"> 93 </span> 41/increment-ecx
|
<span id="L93" class="LineNr"> 93 </span> 41/increment-ecx
|
||||||
<span id="L94" class="LineNr"> 94 </span> <span class="subxComment"># ++s1</span>
|
<span id="L94" class="LineNr"> 94 </span> <span class="subxComment"># ++s1</span>
|
||||||
|
@ -162,7 +162,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L100" class="LineNr">100 </span> <span class="subxComment"># return *s1 == 0</span>
|
<span id="L100" class="LineNr">100 </span> <span class="subxComment"># return *s1 == 0</span>
|
||||||
<span id="L101" class="LineNr">101 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span>
|
<span id="L101" class="LineNr">101 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span>
|
||||||
<span id="L102" class="LineNr">102 </span> 3d/compare-eax-and 0/imm32
|
<span id="L102" class="LineNr">102 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L103" class="LineNr">103 </span> 75/jump-if-not-equal $kernel-string-equal?:false/disp8
|
<span id="L103" class="LineNr">103 </span> 75/jump-if-!= $kernel-string-equal?:false/disp8
|
||||||
<span id="L104" class="LineNr">104 </span><span class="Constant">$kernel-string-equal?:true</span>:
|
<span id="L104" class="LineNr">104 </span><span class="Constant">$kernel-string-equal?:true</span>:
|
||||||
<span id="L105" class="LineNr">105 </span> b8/copy-to-eax 1/imm32
|
<span id="L105" class="LineNr">105 </span> b8/copy-to-eax 1/imm32
|
||||||
<span id="L106" class="LineNr">106 </span> eb/jump $kernel-string-equal?:end/disp8
|
<span id="L106" class="LineNr">106 </span> eb/jump $kernel-string-equal?:end/disp8
|
||||||
|
|
|
@ -112,7 +112,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L50" class="LineNr"> 50 </span><span class="Constant">$string-equal?:lengths</span>:
|
<span id="L50" class="LineNr"> 50 </span><span class="Constant">$string-equal?:lengths</span>:
|
||||||
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># if (ecx != benchmark->length) return false</span>
|
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># if (ecx != benchmark->length) return false</span>
|
||||||
<span id="L52" class="LineNr"> 52 </span> 39/compare 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare *edi and ecx</span>
|
<span id="L52" class="LineNr"> 52 </span> 39/compare 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare *edi and ecx</span>
|
||||||
<span id="L53" class="LineNr"> 53 </span> 75/jump-if-not-equal $string-equal?:false/disp8
|
<span id="L53" class="LineNr"> 53 </span> 75/jump-if-!= $string-equal?:false/disp8
|
||||||
<span id="L54" class="LineNr"> 54 </span> <span class="subxComment"># var currs/esi : (addr byte) = s->data</span>
|
<span id="L54" class="LineNr"> 54 </span> <span class="subxComment"># var currs/esi : (addr byte) = s->data</span>
|
||||||
<span id="L55" class="LineNr"> 55 </span> 81 0/subop/add 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esi</span>
|
<span id="L55" class="LineNr"> 55 </span> 81 0/subop/add 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esi</span>
|
||||||
<span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># var maxs/ecx : (addr byte) = &s->data[s->length]</span>
|
<span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># var maxs/ecx : (addr byte) = &s->data[s->length]</span>
|
||||||
|
@ -126,14 +126,14 @@ if ('onhashchange' in window) {
|
||||||
<span id="L64" class="LineNr"> 64 </span><span class="Constant">$string-equal?:loop</span>:
|
<span id="L64" class="LineNr"> 64 </span><span class="Constant">$string-equal?:loop</span>:
|
||||||
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># if (currs >= maxs) return true</span>
|
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># if (currs >= maxs) return true</span>
|
||||||
<span id="L66" class="LineNr"> 66 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with ecx</span>
|
<span id="L66" class="LineNr"> 66 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with ecx</span>
|
||||||
<span id="L67" class="LineNr"> 67 </span> 73/jump-if-greater-or-equal-unsigned $string-equal?:true/disp8
|
<span id="L67" class="LineNr"> 67 </span> 73/jump-if-addr>= $string-equal?:true/disp8
|
||||||
<span id="L68" class="LineNr"> 68 </span> <span class="subxComment"># c1 = *currs</span>
|
<span id="L68" class="LineNr"> 68 </span> <span class="subxComment"># c1 = *currs</span>
|
||||||
<span id="L69" class="LineNr"> 69 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
<span id="L69" class="LineNr"> 69 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
||||||
<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># c2 = *currb</span>
|
<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># c2 = *currb</span>
|
||||||
<span id="L71" class="LineNr"> 71 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/DL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to DL</span>
|
<span id="L71" class="LineNr"> 71 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/DL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to DL</span>
|
||||||
<span id="L72" class="LineNr"> 72 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
<span id="L72" class="LineNr"> 72 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
||||||
<span id="L73" class="LineNr"> 73 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and edx</span>
|
<span id="L73" class="LineNr"> 73 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and edx</span>
|
||||||
<span id="L74" class="LineNr"> 74 </span> 75/jump-if-not-equal $string-equal?:false/disp8
|
<span id="L74" class="LineNr"> 74 </span> 75/jump-if-!= $string-equal?:false/disp8
|
||||||
<span id="L75" class="LineNr"> 75 </span> <span class="subxComment"># ++currs</span>
|
<span id="L75" class="LineNr"> 75 </span> <span class="subxComment"># ++currs</span>
|
||||||
<span id="L76" class="LineNr"> 76 </span> 46/increment-esi
|
<span id="L76" class="LineNr"> 76 </span> 46/increment-esi
|
||||||
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># ++currb</span>
|
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># ++currb</span>
|
||||||
|
|
|
@ -94,7 +94,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L36" class="LineNr">36 </span><span class="Constant">$clear-stream:loop</span>:
|
<span id="L36" class="LineNr">36 </span><span class="Constant">$clear-stream:loop</span>:
|
||||||
<span id="L37" class="LineNr">37 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L37" class="LineNr">37 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L38" class="LineNr">38 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
<span id="L38" class="LineNr">38 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
||||||
<span id="L39" class="LineNr">39 </span> 73/jump-if-greater-or-equal-unsigned $clear-stream:end/disp8
|
<span id="L39" class="LineNr">39 </span> 73/jump-if-addr>= $clear-stream:end/disp8
|
||||||
<span id="L40" class="LineNr">40 </span> <span class="subxComment"># *curr = 0</span>
|
<span id="L40" class="LineNr">40 </span> <span class="subxComment"># *curr = 0</span>
|
||||||
<span id="L41" class="LineNr">41 </span> c6 0/subop/copy-byte 0/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm8 <span class="subxComment"># copy byte to *eax</span>
|
<span id="L41" class="LineNr">41 </span> c6 0/subop/copy-byte 0/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm8 <span class="subxComment"># copy byte to *eax</span>
|
||||||
<span id="L42" class="LineNr">42 </span> <span class="subxComment"># ++curr</span>
|
<span id="L42" class="LineNr">42 </span> <span class="subxComment"># ++curr</span>
|
||||||
|
|
|
@ -180,7 +180,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L117" class="LineNr">117 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L117" class="LineNr">117 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L118" class="LineNr">118 </span> <span class="subxComment"># if (eax == 0) return</span>
|
<span id="L118" class="LineNr">118 </span> <span class="subxComment"># if (eax == 0) return</span>
|
||||||
<span id="L119" class="LineNr">119 </span> 3d/compare-eax-and 0/imm32
|
<span id="L119" class="LineNr">119 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L120" class="LineNr">120 </span> 74/jump-if-equal $trace:end/disp8
|
<span id="L120" class="LineNr">120 </span> 74/jump-if-= $trace:end/disp8
|
||||||
<span id="L121" class="LineNr">121 </span> <span class="subxComment"># t->write += eax</span>
|
<span id="L121" class="LineNr">121 </span> <span class="subxComment"># t->write += eax</span>
|
||||||
<span id="L122" class="LineNr">122 </span> 01/add 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># add eax to *edi</span>
|
<span id="L122" class="LineNr">122 </span> 01/add 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># add eax to *edi</span>
|
||||||
<span id="L123" class="LineNr">123 </span> <span class="subxComment"># refresh ecx = t->write</span>
|
<span id="L123" class="LineNr">123 </span> <span class="subxComment"># refresh ecx = t->write</span>
|
||||||
|
@ -398,7 +398,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L335" class="LineNr">335 </span><span class="Constant">$trace-scan:loop</span>:
|
<span id="L335" class="LineNr">335 </span><span class="Constant">$trace-scan:loop</span>:
|
||||||
<span id="L336" class="LineNr">336 </span> <span class="subxComment"># if (Trace-stream->read >= Trace-stream->write) return false</span>
|
<span id="L336" class="LineNr">336 </span> <span class="subxComment"># if (Trace-stream->read >= Trace-stream->write) return false</span>
|
||||||
<span id="L337" class="LineNr">337 </span> 39/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
<span id="L337" class="LineNr">337 </span> 39/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
||||||
<span id="L338" class="LineNr">338 </span> 7d/jump-if-greater-or-equal $trace-scan:false/disp8
|
<span id="L338" class="LineNr">338 </span> 7d/jump-if->= $trace-scan:false/disp8
|
||||||
<span id="L339" class="LineNr">339 </span> <span class="subxComment"># eax = next-line-matches?(Trace-stream, line)</span>
|
<span id="L339" class="LineNr">339 </span> <span class="subxComment"># eax = next-line-matches?(Trace-stream, line)</span>
|
||||||
<span id="L340" class="LineNr">340 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L340" class="LineNr">340 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L341" class="LineNr">341 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
|
<span id="L341" class="LineNr">341 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
|
||||||
|
@ -409,7 +409,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L346" class="LineNr">346 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L346" class="LineNr">346 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L347" class="LineNr">347 </span> <span class="subxComment"># if (eax == false) continue</span>
|
<span id="L347" class="LineNr">347 </span> <span class="subxComment"># if (eax == false) continue</span>
|
||||||
<span id="L348" class="LineNr">348 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L348" class="LineNr">348 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L349" class="LineNr">349 </span> 74/jump-if-equal $trace-scan:continue/disp8
|
<span id="L349" class="LineNr">349 </span> 74/jump-if-= $trace-scan:continue/disp8
|
||||||
<span id="L350" class="LineNr">350 </span><span class="Constant">$trace-scan:true</span>:
|
<span id="L350" class="LineNr">350 </span><span class="Constant">$trace-scan:true</span>:
|
||||||
<span id="L351" class="LineNr">351 </span> <span class="subxComment"># skip-next-line(Trace-stream)</span>
|
<span id="L351" class="LineNr">351 </span> <span class="subxComment"># skip-next-line(Trace-stream)</span>
|
||||||
<span id="L352" class="LineNr">352 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L352" class="LineNr">352 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -667,12 +667,12 @@ if ('onhashchange' in window) {
|
||||||
<span id="L604" class="LineNr">604 </span><span class="Constant">$next-line-matches?:loop</span>:
|
<span id="L604" class="LineNr">604 </span><span class="Constant">$next-line-matches?:loop</span>:
|
||||||
<span id="L605" class="LineNr">605 </span> <span class="subxComment"># if (currl >= maxl) break</span>
|
<span id="L605" class="LineNr">605 </span> <span class="subxComment"># if (currl >= maxl) break</span>
|
||||||
<span id="L606" class="LineNr">606 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi and ecx</span>
|
<span id="L606" class="LineNr">606 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi and ecx</span>
|
||||||
<span id="L607" class="LineNr">607 </span> 73/jump-if-greater-or-equal-unsigned $next-line-matches?:<span class="Constant">break</span>/disp8
|
<span id="L607" class="LineNr">607 </span> 73/jump-if-addr>= $next-line-matches?:<span class="Constant">break</span>/disp8
|
||||||
<span id="L608" class="LineNr">608 </span> <span class="subxComment"># if (currt >= maxt) return false</span>
|
<span id="L608" class="LineNr">608 </span> <span class="subxComment"># if (currt >= maxt) return false</span>
|
||||||
<span id="L609" class="LineNr">609 </span> <span class="subxS1Comment"># . eax = false</span>
|
<span id="L609" class="LineNr">609 </span> <span class="subxS1Comment"># . eax = false</span>
|
||||||
<span id="L610" class="LineNr">610 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L610" class="LineNr">610 </span> b8/copy-to-eax 0/imm32/false
|
||||||
<span id="L611" class="LineNr">611 </span> 39/compare 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edi and edx</span>
|
<span id="L611" class="LineNr">611 </span> 39/compare 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edi and edx</span>
|
||||||
<span id="L612" class="LineNr">612 </span> 73/jump-if-greater-or-equal-unsigned $next-line-matches?:end/disp8
|
<span id="L612" class="LineNr">612 </span> 73/jump-if-addr>= $next-line-matches?:end/disp8
|
||||||
<span id="L613" class="LineNr">613 </span> <span class="subxComment"># if (*currt != *currl) return false</span>
|
<span id="L613" class="LineNr">613 </span> <span class="subxComment"># if (*currt != *currl) return false</span>
|
||||||
<span id="L614" class="LineNr">614 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L614" class="LineNr">614 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L615" class="LineNr">615 </span> 31/xor 3/mod/direct 3/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
<span id="L615" class="LineNr">615 </span> 31/xor 3/mod/direct 3/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
||||||
|
@ -684,7 +684,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L621" class="LineNr">621 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
<span id="L621" class="LineNr">621 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
||||||
<span id="L622" class="LineNr">622 </span> <span class="subxS1Comment"># . eax = false</span>
|
<span id="L622" class="LineNr">622 </span> <span class="subxS1Comment"># . eax = false</span>
|
||||||
<span id="L623" class="LineNr">623 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L623" class="LineNr">623 </span> b8/copy-to-eax 0/imm32/false
|
||||||
<span id="L624" class="LineNr">624 </span> 75/jump-if-not-equal $next-line-matches?:end/disp8
|
<span id="L624" class="LineNr">624 </span> 75/jump-if-!= $next-line-matches?:end/disp8
|
||||||
<span id="L625" class="LineNr">625 </span> <span class="subxComment"># ++currt</span>
|
<span id="L625" class="LineNr">625 </span> <span class="subxComment"># ++currt</span>
|
||||||
<span id="L626" class="LineNr">626 </span> 47/increment-edi
|
<span id="L626" class="LineNr">626 </span> 47/increment-edi
|
||||||
<span id="L627" class="LineNr">627 </span> <span class="subxComment"># ++currl</span>
|
<span id="L627" class="LineNr">627 </span> <span class="subxComment"># ++currl</span>
|
||||||
|
@ -698,7 +698,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L635" class="LineNr">635 </span> 3d/compare-eax-and 0xa/imm32/newline
|
<span id="L635" class="LineNr">635 </span> 3d/compare-eax-and 0xa/imm32/newline
|
||||||
<span id="L636" class="LineNr">636 </span> <span class="subxS1Comment"># . eax = false</span>
|
<span id="L636" class="LineNr">636 </span> <span class="subxS1Comment"># . eax = false</span>
|
||||||
<span id="L637" class="LineNr">637 </span> b8/copy-to-eax 1/imm32/true
|
<span id="L637" class="LineNr">637 </span> b8/copy-to-eax 1/imm32/true
|
||||||
<span id="L638" class="LineNr">638 </span> 74/jump-if-equal $next-line-matches?:end/disp8
|
<span id="L638" class="LineNr">638 </span> 74/jump-if-= $next-line-matches?:end/disp8
|
||||||
<span id="L639" class="LineNr">639 </span> b8/copy-to-eax 0/imm32/true
|
<span id="L639" class="LineNr">639 </span> b8/copy-to-eax 0/imm32/true
|
||||||
<span id="L640" class="LineNr">640 </span><span class="Constant">$next-line-matches?:end</span>:
|
<span id="L640" class="LineNr">640 </span><span class="Constant">$next-line-matches?:end</span>:
|
||||||
<span id="L641" class="LineNr">641 </span> <span class="subxS1Comment"># . restore registers</span>
|
<span id="L641" class="LineNr">641 </span> <span class="subxS1Comment"># . restore registers</span>
|
||||||
|
@ -834,14 +834,14 @@ if ('onhashchange' in window) {
|
||||||
<span id="L771" class="LineNr">771 </span><span class="Constant">$skip-next-line:loop</span>:
|
<span id="L771" class="LineNr">771 </span><span class="Constant">$skip-next-line:loop</span>:
|
||||||
<span id="L772" class="LineNr">772 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L772" class="LineNr">772 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L773" class="LineNr">773 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx and ebx</span>
|
<span id="L773" class="LineNr">773 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx and ebx</span>
|
||||||
<span id="L774" class="LineNr">774 </span> 73/jump-if-greater-or-equal-unsigned $skip-next-line:end/disp8
|
<span id="L774" class="LineNr">774 </span> 73/jump-if-addr>= $skip-next-line:end/disp8
|
||||||
<span id="L775" class="LineNr">775 </span> <span class="subxComment"># ++i</span>
|
<span id="L775" class="LineNr">775 </span> <span class="subxComment"># ++i</span>
|
||||||
<span id="L776" class="LineNr">776 </span> 42/increment-edx
|
<span id="L776" class="LineNr">776 </span> 42/increment-edx
|
||||||
<span id="L777" class="LineNr">777 </span> <span class="subxComment"># if (*curr == '\n') break</span>
|
<span id="L777" class="LineNr">777 </span> <span class="subxComment"># if (*curr == '\n') break</span>
|
||||||
<span id="L778" class="LineNr">778 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L778" class="LineNr">778 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L779" class="LineNr">779 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *ecx to eax</span>
|
<span id="L779" class="LineNr">779 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *ecx to eax</span>
|
||||||
<span id="L780" class="LineNr">780 </span> 3d/compare-eax-and 0a/imm32/newline
|
<span id="L780" class="LineNr">780 </span> 3d/compare-eax-and 0a/imm32/newline
|
||||||
<span id="L781" class="LineNr">781 </span> 74/jump-if-equal $skip-next-line:end/disp8
|
<span id="L781" class="LineNr">781 </span> 74/jump-if-= $skip-next-line:end/disp8
|
||||||
<span id="L782" class="LineNr">782 </span> <span class="subxComment"># ++curr</span>
|
<span id="L782" class="LineNr">782 </span> <span class="subxComment"># ++curr</span>
|
||||||
<span id="L783" class="LineNr">783 </span> 41/increment-ecx
|
<span id="L783" class="LineNr">783 </span> 41/increment-ecx
|
||||||
<span id="L784" class="LineNr">784 </span> <span class="subxComment"># loop</span>
|
<span id="L784" class="LineNr">784 </span> <span class="subxComment"># loop</span>
|
||||||
|
@ -980,10 +980,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L917" class="LineNr">917 </span><span class="Constant">$_append-4:loop</span>:
|
<span id="L917" class="LineNr">917 </span><span class="Constant">$_append-4:loop</span>:
|
||||||
<span id="L918" class="LineNr">918 </span> <span class="subxComment"># if (in >= inend) break</span>
|
<span id="L918" class="LineNr">918 </span> <span class="subxComment"># if (in >= inend) break</span>
|
||||||
<span id="L919" class="LineNr">919 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with ecx</span>
|
<span id="L919" class="LineNr">919 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with ecx</span>
|
||||||
<span id="L920" class="LineNr">920 </span> 73/jump-if-greater-or-equal-unsigned $_append-4:end/disp8
|
<span id="L920" class="LineNr">920 </span> 73/jump-if-addr>= $_append-4:end/disp8
|
||||||
<span id="L921" class="LineNr">921 </span> <span class="subxComment"># if (out >= outend) abort # just to catch test failures fast</span>
|
<span id="L921" class="LineNr">921 </span> <span class="subxComment"># if (out >= outend) abort # just to catch test failures fast</span>
|
||||||
<span id="L922" class="LineNr">922 </span> 39/compare 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edi with edx</span>
|
<span id="L922" class="LineNr">922 </span> 39/compare 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edi with edx</span>
|
||||||
<span id="L923" class="LineNr">923 </span> 73/jump-if-greater-or-equal-unsigned $_append-4:abort/disp8
|
<span id="L923" class="LineNr">923 </span> 73/jump-if-addr>= $_append-4:abort/disp8
|
||||||
<span id="L924" class="LineNr">924 </span> <span class="subxComment"># *out = *in</span>
|
<span id="L924" class="LineNr">924 </span> <span class="subxComment"># *out = *in</span>
|
||||||
<span id="L925" class="LineNr">925 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to BL</span>
|
<span id="L925" class="LineNr">925 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to BL</span>
|
||||||
<span id="L926" class="LineNr">926 </span> 88/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at BL to *edi</span>
|
<span id="L926" class="LineNr">926 </span> 88/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at BL to *edi</span>
|
||||||
|
|
|
@ -87,7 +87,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L27" class="LineNr"> 27 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
|
<span id="L27" class="LineNr"> 27 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
|
||||||
<span id="L28" class="LineNr"> 28 </span> <span class="subxComment"># if (f < 0x08000000) _write(f, s) and return # f can't be a user-mode address, so treat it as a kernel file descriptor</span>
|
<span id="L28" class="LineNr"> 28 </span> <span class="subxComment"># if (f < 0x08000000) _write(f, s) and return # f can't be a user-mode address, so treat it as a kernel file descriptor</span>
|
||||||
<span id="L29" class="LineNr"> 29 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x08000000/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
<span id="L29" class="LineNr"> 29 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x08000000/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
||||||
<span id="L30" class="LineNr"> 30 </span> 73/jump-if-greater-unsigned-or-equal $write:fake/disp8
|
<span id="L30" class="LineNr"> 30 </span> 73/jump-if-addr>= $write:fake/disp8
|
||||||
<span id="L31" class="LineNr"> 31 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L31" class="LineNr"> 31 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L32" class="LineNr"> 32 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+12)</span>
|
<span id="L32" class="LineNr"> 32 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+12)</span>
|
||||||
<span id="L33" class="LineNr"> 33 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
|
<span id="L33" class="LineNr"> 33 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
|
||||||
|
|
|
@ -87,7 +87,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L28" class="LineNr"> 28 </span><span class="Constant">$stream-data-equal?:compare-lengths</span>:
|
<span id="L28" class="LineNr"> 28 </span><span class="Constant">$stream-data-equal?:compare-lengths</span>:
|
||||||
<span id="L29" class="LineNr"> 29 </span> <span class="subxComment"># if (f->write != s->length) return false</span>
|
<span id="L29" class="LineNr"> 29 </span> <span class="subxComment"># if (f->write != s->length) return false</span>
|
||||||
<span id="L30" class="LineNr"> 30 </span> 39/compare 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare *edi and eax</span>
|
<span id="L30" class="LineNr"> 30 </span> 39/compare 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare *edi and eax</span>
|
||||||
<span id="L31" class="LineNr"> 31 </span> 75/jump-if-not-equal $stream-data-equal?:false/disp8
|
<span id="L31" class="LineNr"> 31 </span> 75/jump-if-!= $stream-data-equal?:false/disp8
|
||||||
<span id="L32" class="LineNr"> 32 </span> <span class="subxComment"># var currs/edi : (addr byte) = s->data</span>
|
<span id="L32" class="LineNr"> 32 </span> <span class="subxComment"># var currs/edi : (addr byte) = s->data</span>
|
||||||
<span id="L33" class="LineNr"> 33 </span> 81 0/subop/add 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to edi</span>
|
<span id="L33" class="LineNr"> 33 </span> 81 0/subop/add 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to edi</span>
|
||||||
<span id="L34" class="LineNr"> 34 </span> <span class="subxComment"># var eax : byte = 0</span>
|
<span id="L34" class="LineNr"> 34 </span> <span class="subxComment"># var eax : byte = 0</span>
|
||||||
|
@ -97,14 +97,14 @@ if ('onhashchange' in window) {
|
||||||
<span id="L38" class="LineNr"> 38 </span><span class="Constant">$stream-data-equal?:loop</span>:
|
<span id="L38" class="LineNr"> 38 </span><span class="Constant">$stream-data-equal?:loop</span>:
|
||||||
<span id="L39" class="LineNr"> 39 </span> <span class="subxComment"># if (currf >= maxf) return true</span>
|
<span id="L39" class="LineNr"> 39 </span> <span class="subxComment"># if (currf >= maxf) return true</span>
|
||||||
<span id="L40" class="LineNr"> 40 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with edx</span>
|
<span id="L40" class="LineNr"> 40 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with edx</span>
|
||||||
<span id="L41" class="LineNr"> 41 </span> 73/jump-if-greater-or-equal-unsigned $stream-data-equal?:true/disp8
|
<span id="L41" class="LineNr"> 41 </span> 73/jump-if-addr>= $stream-data-equal?:true/disp8
|
||||||
<span id="L42" class="LineNr"> 42 </span> <span class="subxComment"># AL = *currs</span>
|
<span id="L42" class="LineNr"> 42 </span> <span class="subxComment"># AL = *currs</span>
|
||||||
<span id="L43" class="LineNr"> 43 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
<span id="L43" class="LineNr"> 43 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
||||||
<span id="L44" class="LineNr"> 44 </span> <span class="subxComment"># CL = *curr</span>
|
<span id="L44" class="LineNr"> 44 </span> <span class="subxComment"># CL = *curr</span>
|
||||||
<span id="L45" class="LineNr"> 45 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to CL</span>
|
<span id="L45" class="LineNr"> 45 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to CL</span>
|
||||||
<span id="L46" class="LineNr"> 46 </span> <span class="subxComment"># if (eax != ecx) return false</span>
|
<span id="L46" class="LineNr"> 46 </span> <span class="subxComment"># if (eax != ecx) return false</span>
|
||||||
<span id="L47" class="LineNr"> 47 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ecx</span>
|
<span id="L47" class="LineNr"> 47 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ecx</span>
|
||||||
<span id="L48" class="LineNr"> 48 </span> 75/jump-if-not-equal $stream-data-equal?:false/disp8
|
<span id="L48" class="LineNr"> 48 </span> 75/jump-if-!= $stream-data-equal?:false/disp8
|
||||||
<span id="L49" class="LineNr"> 49 </span> <span class="subxComment"># ++f</span>
|
<span id="L49" class="LineNr"> 49 </span> <span class="subxComment"># ++f</span>
|
||||||
<span id="L50" class="LineNr"> 50 </span> 46/increment-esi
|
<span id="L50" class="LineNr"> 50 </span> 46/increment-esi
|
||||||
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># ++curr</span>
|
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># ++curr</span>
|
||||||
|
@ -346,20 +346,20 @@ if ('onhashchange' in window) {
|
||||||
<span id="L287" class="LineNr">287 </span><span class="Constant">$next-stream-line-equal?:loop</span>:
|
<span id="L287" class="LineNr">287 </span><span class="Constant">$next-stream-line-equal?:loop</span>:
|
||||||
<span id="L288" class="LineNr">288 </span> <span class="subxComment"># if (currf >= f->write) break</span>
|
<span id="L288" class="LineNr">288 </span> <span class="subxComment"># if (currf >= f->write) break</span>
|
||||||
<span id="L289" class="LineNr">289 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *esi</span>
|
<span id="L289" class="LineNr">289 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *esi</span>
|
||||||
<span id="L290" class="LineNr">290 </span> 7d/jump-if-greater-or-equal $next-stream-line-equal?:<span class="Constant">break</span>/disp8
|
<span id="L290" class="LineNr">290 </span> 7d/jump-if->= $next-stream-line-equal?:<span class="Constant">break</span>/disp8
|
||||||
<span id="L291" class="LineNr">291 </span> <span class="subxComment"># c1 = f->data[f->read]</span>
|
<span id="L291" class="LineNr">291 </span> <span class="subxComment"># c1 = f->data[f->read]</span>
|
||||||
<span id="L292" class="LineNr">292 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
<span id="L292" class="LineNr">292 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
||||||
<span id="L293" class="LineNr">293 </span> <span class="subxComment"># if (c1 == '\n') break</span>
|
<span id="L293" class="LineNr">293 </span> <span class="subxComment"># if (c1 == '\n') break</span>
|
||||||
<span id="L294" class="LineNr">294 </span> 3d/compare-eax-and 0xa/imm32/newline
|
<span id="L294" class="LineNr">294 </span> 3d/compare-eax-and 0xa/imm32/newline
|
||||||
<span id="L295" class="LineNr">295 </span> 74/jump-if-equal $next-stream-line-equal?:<span class="Constant">break</span>/disp8
|
<span id="L295" class="LineNr">295 </span> 74/jump-if-= $next-stream-line-equal?:<span class="Constant">break</span>/disp8
|
||||||
<span id="L296" class="LineNr">296 </span> <span class="subxComment"># if (currs >= s->length) return false</span>
|
<span id="L296" class="LineNr">296 </span> <span class="subxComment"># if (currs >= s->length) return false</span>
|
||||||
<span id="L297" class="LineNr">297 </span> 3b/compare 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with *edi</span>
|
<span id="L297" class="LineNr">297 </span> 3b/compare 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with *edi</span>
|
||||||
<span id="L298" class="LineNr">298 </span> 7d/jump-if-greater-or-equal $next-stream-line-equal?:false/disp8
|
<span id="L298" class="LineNr">298 </span> 7d/jump-if->= $next-stream-line-equal?:false/disp8
|
||||||
<span id="L299" class="LineNr">299 </span> <span class="subxComment"># c2 = s->data[currs]</span>
|
<span id="L299" class="LineNr">299 </span> <span class="subxComment"># c2 = s->data[currs]</span>
|
||||||
<span id="L300" class="LineNr">300 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 7/base/edi 2/index/edx <span class="Normal"> . </span> 3/r32/BL 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(edi+edx+4) to BL</span>
|
<span id="L300" class="LineNr">300 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 7/base/edi 2/index/edx <span class="Normal"> . </span> 3/r32/BL 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(edi+edx+4) to BL</span>
|
||||||
<span id="L301" class="LineNr">301 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
<span id="L301" class="LineNr">301 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
||||||
<span id="L302" class="LineNr">302 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
<span id="L302" class="LineNr">302 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
||||||
<span id="L303" class="LineNr">303 </span> 75/jump-if-not-equal $next-stream-line-equal?:false/disp8
|
<span id="L303" class="LineNr">303 </span> 75/jump-if-!= $next-stream-line-equal?:false/disp8
|
||||||
<span id="L304" class="LineNr">304 </span> <span class="subxComment"># ++currf</span>
|
<span id="L304" class="LineNr">304 </span> <span class="subxComment"># ++currf</span>
|
||||||
<span id="L305" class="LineNr">305 </span> 41/increment-ecx
|
<span id="L305" class="LineNr">305 </span> 41/increment-ecx
|
||||||
<span id="L306" class="LineNr">306 </span> <span class="subxComment"># ++currs</span>
|
<span id="L306" class="LineNr">306 </span> <span class="subxComment"># ++currs</span>
|
||||||
|
@ -370,7 +370,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L311" class="LineNr">311 </span> 41/increment-ecx
|
<span id="L311" class="LineNr">311 </span> 41/increment-ecx
|
||||||
<span id="L312" class="LineNr">312 </span> <span class="subxComment"># if (currs >= s->length) return true</span>
|
<span id="L312" class="LineNr">312 </span> <span class="subxComment"># if (currs >= s->length) return true</span>
|
||||||
<span id="L313" class="LineNr">313 </span> 3b/compare 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with *edi</span>
|
<span id="L313" class="LineNr">313 </span> 3b/compare 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with *edi</span>
|
||||||
<span id="L314" class="LineNr">314 </span> 7c/jump-if-lesser $next-stream-line-equal?:false/disp8
|
<span id="L314" class="LineNr">314 </span> 7c/jump-if-< $next-stream-line-equal?:false/disp8
|
||||||
<span id="L315" class="LineNr">315 </span><span class="Constant">$next-stream-line-equal?:true</span>:
|
<span id="L315" class="LineNr">315 </span><span class="Constant">$next-stream-line-equal?:true</span>:
|
||||||
<span id="L316" class="LineNr">316 </span> b8/copy-to-eax 1/imm32
|
<span id="L316" class="LineNr">316 </span> b8/copy-to-eax 1/imm32
|
||||||
<span id="L317" class="LineNr">317 </span> <span class="subxComment"># persist f->read on success</span>
|
<span id="L317" class="LineNr">317 </span> <span class="subxComment"># persist f->read on success</span>
|
||||||
|
|
|
@ -156,7 +156,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L95" class="LineNr"> 95 </span> 8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esp+4) to eax</span>
|
<span id="L95" class="LineNr"> 95 </span> 8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esp+4) to eax</span>
|
||||||
<span id="L96" class="LineNr"> 96 </span> <span class="subxComment"># if (ed->target == 0) really exit</span>
|
<span id="L96" class="LineNr"> 96 </span> <span class="subxComment"># if (ed->target == 0) really exit</span>
|
||||||
<span id="L97" class="LineNr"> 97 </span> 81 7/subop/compare 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *eax</span>
|
<span id="L97" class="LineNr"> 97 </span> 81 7/subop/compare 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *eax</span>
|
||||||
<span id="L98" class="LineNr"> 98 </span> 75/jump-if-not-equal $stop:fake/disp8
|
<span id="L98" class="LineNr"> 98 </span> 75/jump-if-!= $stop:fake/disp8
|
||||||
<span id="L99" class="LineNr"> 99 </span> <span class="subxS1Comment"># . syscall(exit, value)</span>
|
<span id="L99" class="LineNr"> 99 </span> <span class="subxS1Comment"># . syscall(exit, value)</span>
|
||||||
<span id="L100" class="LineNr">100 </span> 8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none <span class="Normal"> . </span> 3/r32/ebx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esp+8) to ebx</span>
|
<span id="L100" class="LineNr">100 </span> 8b/copy 1/mod/*+disp8 4/rm32/sib 4/base/esp 4/index/none <span class="Normal"> . </span> 3/r32/ebx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esp+8) to ebx</span>
|
||||||
<span id="L101" class="LineNr">101 </span> b8/copy-to-eax 1/imm32/exit
|
<span id="L101" class="LineNr">101 </span> b8/copy-to-eax 1/imm32/exit
|
||||||
|
|
|
@ -112,7 +112,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L51" class="LineNr"> 51 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
|
<span id="L51" class="LineNr"> 51 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
|
||||||
<span id="L52" class="LineNr"> 52 </span> <span class="subxComment"># if (f < 0x08000000) return _read(f, s) # f can't be a user-mode address, so treat it as a kernel file descriptor</span>
|
<span id="L52" class="LineNr"> 52 </span> <span class="subxComment"># if (f < 0x08000000) return _read(f, s) # f can't be a user-mode address, so treat it as a kernel file descriptor</span>
|
||||||
<span id="L53" class="LineNr"> 53 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x08000000/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
<span id="L53" class="LineNr"> 53 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x08000000/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
||||||
<span id="L54" class="LineNr"> 54 </span> 73/jump-if-greater-unsigned-or-equal $read:fake/disp8
|
<span id="L54" class="LineNr"> 54 </span> 73/jump-if-addr>= $read:fake/disp8
|
||||||
<span id="L55" class="LineNr"> 55 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L55" class="LineNr"> 55 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L56" class="LineNr"> 56 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+12)</span>
|
<span id="L56" class="LineNr"> 56 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+12)</span>
|
||||||
<span id="L57" class="LineNr"> 57 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
|
<span id="L57" class="LineNr"> 57 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
|
||||||
|
@ -226,10 +226,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L165" class="LineNr">165 </span><span class="Constant">$_buffer-4:loop</span>:
|
<span id="L165" class="LineNr">165 </span><span class="Constant">$_buffer-4:loop</span>:
|
||||||
<span id="L166" class="LineNr">166 </span> <span class="subxComment"># if (in >= inend) break</span>
|
<span id="L166" class="LineNr">166 </span> <span class="subxComment"># if (in >= inend) break</span>
|
||||||
<span id="L167" class="LineNr">167 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with ecx</span>
|
<span id="L167" class="LineNr">167 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with ecx</span>
|
||||||
<span id="L168" class="LineNr">168 </span> 73/jump-if-greater-or-equal-unsigned $_buffer-4:end/disp8
|
<span id="L168" class="LineNr">168 </span> 73/jump-if-addr>= $_buffer-4:end/disp8
|
||||||
<span id="L169" class="LineNr">169 </span> <span class="subxComment"># if (out >= outend) break # for now silently ignore filled up buffer</span>
|
<span id="L169" class="LineNr">169 </span> <span class="subxComment"># if (out >= outend) break # for now silently ignore filled up buffer</span>
|
||||||
<span id="L170" class="LineNr">170 </span> 39/compare 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edi with edx</span>
|
<span id="L170" class="LineNr">170 </span> 39/compare 3/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edi with edx</span>
|
||||||
<span id="L171" class="LineNr">171 </span> 73/jump-if-greater-or-equal-unsigned $_buffer-4:end/disp8
|
<span id="L171" class="LineNr">171 </span> 73/jump-if-addr>= $_buffer-4:end/disp8
|
||||||
<span id="L172" class="LineNr">172 </span> <span class="subxComment"># *out = *in</span>
|
<span id="L172" class="LineNr">172 </span> <span class="subxComment"># *out = *in</span>
|
||||||
<span id="L173" class="LineNr">173 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to BL</span>
|
<span id="L173" class="LineNr">173 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to BL</span>
|
||||||
<span id="L174" class="LineNr">174 </span> 88/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at BL to *edi</span>
|
<span id="L174" class="LineNr">174 </span> 88/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at BL to *edi</span>
|
||||||
|
|
|
@ -110,7 +110,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L48" class="LineNr"> 48 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+8) to ecx</span>
|
<span id="L48" class="LineNr"> 48 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+8) to ecx</span>
|
||||||
<span id="L49" class="LineNr"> 49 </span> <span class="subxComment"># if (f->read >= f->write) populate stream from file</span>
|
<span id="L49" class="LineNr"> 49 </span> <span class="subxComment"># if (f->read >= f->write) populate stream from file</span>
|
||||||
<span id="L50" class="LineNr"> 50 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
<span id="L50" class="LineNr"> 50 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
||||||
<span id="L51" class="LineNr"> 51 </span> 7c/jump-if-lesser $read-byte-buffered:from-stream/disp8
|
<span id="L51" class="LineNr"> 51 </span> 7c/jump-if-< $read-byte-buffered:from-stream/disp8
|
||||||
<span id="L52" class="LineNr"> 52 </span> <span class="subxS1Comment"># . clear-stream(stream = f+4)</span>
|
<span id="L52" class="LineNr"> 52 </span> <span class="subxS1Comment"># . clear-stream(stream = f+4)</span>
|
||||||
<span id="L53" class="LineNr"> 53 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L53" class="LineNr"> 53 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L54" class="LineNr"> 54 </span> 8d/copy-address 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+4 to eax</span>
|
<span id="L54" class="LineNr"> 54 </span> 8d/copy-address 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+4 to eax</span>
|
||||||
|
@ -131,7 +131,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L69" class="LineNr"> 69 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L69" class="LineNr"> 69 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># if (eax == 0) return 0xffffffff</span>
|
<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># if (eax == 0) return 0xffffffff</span>
|
||||||
<span id="L71" class="LineNr"> 71 </span> 3d/compare-eax-and 0/imm32
|
<span id="L71" class="LineNr"> 71 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L72" class="LineNr"> 72 </span> 75/jump-if-not-equal $read-byte-buffered:from-stream/disp8
|
<span id="L72" class="LineNr"> 72 </span> 75/jump-if-!= $read-byte-buffered:from-stream/disp8
|
||||||
<span id="L73" class="LineNr"> 73 </span> b8/copy-to-eax 0xffffffff/imm32/Eof
|
<span id="L73" class="LineNr"> 73 </span> b8/copy-to-eax 0xffffffff/imm32/Eof
|
||||||
<span id="L74" class="LineNr"> 74 </span> eb/jump $read-byte-buffered:end/disp8
|
<span id="L74" class="LineNr"> 74 </span> eb/jump $read-byte-buffered:end/disp8
|
||||||
<span id="L75" class="LineNr"> 75 </span><span class="Constant">$read-byte-buffered:from-stream</span>:
|
<span id="L75" class="LineNr"> 75 </span><span class="Constant">$read-byte-buffered:from-stream</span>:
|
||||||
|
|
|
@ -82,7 +82,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L21" class="LineNr"> 21 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
|
<span id="L21" class="LineNr"> 21 </span> 89/copy 3/mod/direct 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/r32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy esp to ebp</span>
|
||||||
<span id="L22" class="LineNr"> 22 </span> <span class="subxComment"># if (f < 0x08000000) _write-stream(f, s), return # f can't be a user-mode address, so treat it as a kernel file descriptor</span>
|
<span id="L22" class="LineNr"> 22 </span> <span class="subxComment"># if (f < 0x08000000) _write-stream(f, s), return # f can't be a user-mode address, so treat it as a kernel file descriptor</span>
|
||||||
<span id="L23" class="LineNr"> 23 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x08000000/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
<span id="L23" class="LineNr"> 23 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x08000000/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
||||||
<span id="L24" class="LineNr"> 24 </span> 73/jump-if-greater-unsigned-or-equal $write-stream:fake/disp8
|
<span id="L24" class="LineNr"> 24 </span> 73/jump-if-addr>= $write-stream:fake/disp8
|
||||||
<span id="L25" class="LineNr"> 25 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L25" class="LineNr"> 25 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L26" class="LineNr"> 26 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+12)</span>
|
<span id="L26" class="LineNr"> 26 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+12)</span>
|
||||||
<span id="L27" class="LineNr"> 27 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
|
<span id="L27" class="LineNr"> 27 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+8)</span>
|
||||||
|
@ -165,7 +165,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L104" class="LineNr">104 </span> cd/syscall 0x80/imm8
|
<span id="L104" class="LineNr">104 </span> cd/syscall 0x80/imm8
|
||||||
<span id="L105" class="LineNr">105 </span> <span class="subxComment"># if (eax < 0) abort</span>
|
<span id="L105" class="LineNr">105 </span> <span class="subxComment"># if (eax < 0) abort</span>
|
||||||
<span id="L106" class="LineNr">106 </span> 3d/compare-eax-with 0/imm32
|
<span id="L106" class="LineNr">106 </span> 3d/compare-eax-with 0/imm32
|
||||||
<span id="L107" class="LineNr">107 </span> 0f 8c/jump-if-lesser $_write-stream:abort/disp32
|
<span id="L107" class="LineNr">107 </span> 0f 8c/jump-if-< $_write-stream:abort/disp32
|
||||||
<span id="L108" class="LineNr">108 </span> <span class="subxComment"># s->read += eax</span>
|
<span id="L108" class="LineNr">108 </span> <span class="subxComment"># s->read += eax</span>
|
||||||
<span id="L109" class="LineNr">109 </span> 01/add 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># add eax to *(esi+4)</span>
|
<span id="L109" class="LineNr">109 </span> 01/add 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># add eax to *(esi+4)</span>
|
||||||
<span id="L110" class="LineNr">110 </span> <span class="subxS1Comment"># . restore registers</span>
|
<span id="L110" class="LineNr">110 </span> <span class="subxS1Comment"># . restore registers</span>
|
||||||
|
|
|
@ -105,7 +105,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L43" class="LineNr"> 43 </span> 8b/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(edi+4) to ecx</span>
|
<span id="L43" class="LineNr"> 43 </span> 8b/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(edi+4) to ecx</span>
|
||||||
<span id="L44" class="LineNr"> 44 </span> <span class="subxComment"># if (f->write >= f->length) flush and clear f's stream</span>
|
<span id="L44" class="LineNr"> 44 </span> <span class="subxComment"># if (f->write >= f->length) flush and clear f's stream</span>
|
||||||
<span id="L45" class="LineNr"> 45 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(edi+12)</span>
|
<span id="L45" class="LineNr"> 45 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(edi+12)</span>
|
||||||
<span id="L46" class="LineNr"> 46 </span> 7c/jump-if-lesser $write-byte-buffered:to-stream/disp8
|
<span id="L46" class="LineNr"> 46 </span> 7c/jump-if-< $write-byte-buffered:to-stream/disp8
|
||||||
<span id="L47" class="LineNr"> 47 </span> <span class="subxS1Comment"># . flush(f)</span>
|
<span id="L47" class="LineNr"> 47 </span> <span class="subxS1Comment"># . flush(f)</span>
|
||||||
<span id="L48" class="LineNr"> 48 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L48" class="LineNr"> 48 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L49" class="LineNr"> 49 </span> 57/push-edi
|
<span id="L49" class="LineNr"> 49 </span> 57/push-edi
|
||||||
|
@ -280,7 +280,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L218" class="LineNr">218 </span> 8b/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *edi to ecx</span>
|
<span id="L218" class="LineNr">218 </span> 8b/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *edi to ecx</span>
|
||||||
<span id="L219" class="LineNr">219 </span> <span class="subxComment"># if (f->write >= f->length) abort</span>
|
<span id="L219" class="LineNr">219 </span> <span class="subxComment"># if (f->write >= f->length) abort</span>
|
||||||
<span id="L220" class="LineNr">220 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(edi+8)</span>
|
<span id="L220" class="LineNr">220 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(edi+8)</span>
|
||||||
<span id="L221" class="LineNr">221 </span> 7d/jump-if-greater-or-equal $append-byte:abort/disp8
|
<span id="L221" class="LineNr">221 </span> 7d/jump-if->= $append-byte:abort/disp8
|
||||||
<span id="L222" class="LineNr">222 </span><span class="Constant">$append-byte:to-stream</span>:
|
<span id="L222" class="LineNr">222 </span><span class="Constant">$append-byte:to-stream</span>:
|
||||||
<span id="L223" class="LineNr">223 </span> <span class="subxComment"># write to stream</span>
|
<span id="L223" class="LineNr">223 </span> <span class="subxComment"># write to stream</span>
|
||||||
<span id="L224" class="LineNr">224 </span> <span class="subxComment"># f->data[f->write] = LSB(n)</span>
|
<span id="L224" class="LineNr">224 </span> <span class="subxComment"># f->data[f->write] = LSB(n)</span>
|
||||||
|
|
|
@ -113,10 +113,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L52" class="LineNr"> 52 </span><span class="Constant">$write-buffered:loop</span>:
|
<span id="L52" class="LineNr"> 52 </span><span class="Constant">$write-buffered:loop</span>:
|
||||||
<span id="L53" class="LineNr"> 53 </span> <span class="subxComment"># if (in >= inend) break</span>
|
<span id="L53" class="LineNr"> 53 </span> <span class="subxComment"># if (in >= inend) break</span>
|
||||||
<span id="L54" class="LineNr"> 54 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with ecx</span>
|
<span id="L54" class="LineNr"> 54 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with ecx</span>
|
||||||
<span id="L55" class="LineNr"> 55 </span> 73/jump-if-greater-or-equal-unsigned $write-buffered:loop-end/disp8
|
<span id="L55" class="LineNr"> 55 </span> 73/jump-if-addr>= $write-buffered:loop-end/disp8
|
||||||
<span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># if (f->write >= f->length) flush and clear f's stream</span>
|
<span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># if (f->write >= f->length) flush and clear f's stream</span>
|
||||||
<span id="L57" class="LineNr"> 57 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx with edx</span>
|
<span id="L57" class="LineNr"> 57 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx with edx</span>
|
||||||
<span id="L58" class="LineNr"> 58 </span> 7c/jump-if-lesser $write-buffered:to-stream/disp8
|
<span id="L58" class="LineNr"> 58 </span> 7c/jump-if-< $write-buffered:to-stream/disp8
|
||||||
<span id="L59" class="LineNr"> 59 </span> <span class="subxS1Comment"># . persist f->write</span>
|
<span id="L59" class="LineNr"> 59 </span> <span class="subxS1Comment"># . persist f->write</span>
|
||||||
<span id="L60" class="LineNr"> 60 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ebx to *(edi+4)</span>
|
<span id="L60" class="LineNr"> 60 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ebx to *(edi+4)</span>
|
||||||
<span id="L61" class="LineNr"> 61 </span> <span class="subxS1Comment"># . flush(f)</span>
|
<span id="L61" class="LineNr"> 61 </span> <span class="subxS1Comment"># . flush(f)</span>
|
||||||
|
|
|
@ -71,7 +71,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L10" class="LineNr"> 10 </span> <span class="subxComment"># no error checking; accepts argument in eax</span>
|
<span id="L10" class="LineNr"> 10 </span> <span class="subxComment"># no error checking; accepts argument in eax</span>
|
||||||
<span id="L11" class="LineNr"> 11 </span> <span class="subxComment"># if (eax <= 9) return eax + '0'</span>
|
<span id="L11" class="LineNr"> 11 </span> <span class="subxComment"># if (eax <= 9) return eax + '0'</span>
|
||||||
<span id="L12" class="LineNr"> 12 </span> 3d/compare-eax-with 0x9/imm32/9
|
<span id="L12" class="LineNr"> 12 </span> 3d/compare-eax-with 0x9/imm32/9
|
||||||
<span id="L13" class="LineNr"> 13 </span> 7f/jump-if-greater $to-hex-char:else/disp8
|
<span id="L13" class="LineNr"> 13 </span> 7f/jump-if-> $to-hex-char:else/disp8
|
||||||
<span id="L14" class="LineNr"> 14 </span> 05/add-to-eax 0x30/imm32/0
|
<span id="L14" class="LineNr"> 14 </span> 05/add-to-eax 0x30/imm32/0
|
||||||
<span id="L15" class="LineNr"> 15 </span> c3/return
|
<span id="L15" class="LineNr"> 15 </span> c3/return
|
||||||
<span id="L16" class="LineNr"> 16 </span><span class="Constant">$to-hex-char:else</span>:
|
<span id="L16" class="LineNr"> 16 </span><span class="Constant">$to-hex-char:else</span>:
|
||||||
|
@ -267,7 +267,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L206" class="LineNr">206 </span><span class="Constant">$print-int32:loop</span>:
|
<span id="L206" class="LineNr">206 </span><span class="Constant">$print-int32:loop</span>:
|
||||||
<span id="L207" class="LineNr">207 </span> <span class="subxComment"># if (ecx < 0) break</span>
|
<span id="L207" class="LineNr">207 </span> <span class="subxComment"># if (ecx < 0) break</span>
|
||||||
<span id="L208" class="LineNr">208 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L208" class="LineNr">208 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L209" class="LineNr">209 </span> 7c/jump-if-lesser $print-int32:end/disp8
|
<span id="L209" class="LineNr">209 </span> 7c/jump-if-< $print-int32:end/disp8
|
||||||
<span id="L210" class="LineNr">210 </span> <span class="subxComment"># eax = n >> ecx</span>
|
<span id="L210" class="LineNr">210 </span> <span class="subxComment"># eax = n >> ecx</span>
|
||||||
<span id="L211" class="LineNr">211 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
<span id="L211" class="LineNr">211 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
||||||
<span id="L212" class="LineNr">212 </span> d3/>>ecx 5/subop/pad-zeroes 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># shift eax right by ecx bits, padding zeroes</span>
|
<span id="L212" class="LineNr">212 </span> d3/>>ecx 5/subop/pad-zeroes 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># shift eax right by ecx bits, padding zeroes</span>
|
||||||
|
@ -355,7 +355,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L294" class="LineNr">294 </span><span class="Constant">$print-int32-buffered:loop</span>:
|
<span id="L294" class="LineNr">294 </span><span class="Constant">$print-int32-buffered:loop</span>:
|
||||||
<span id="L295" class="LineNr">295 </span> <span class="subxComment"># if (ecx < 0) break</span>
|
<span id="L295" class="LineNr">295 </span> <span class="subxComment"># if (ecx < 0) break</span>
|
||||||
<span id="L296" class="LineNr">296 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L296" class="LineNr">296 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L297" class="LineNr">297 </span> 7c/jump-if-lesser $print-int32-buffered:end/disp8
|
<span id="L297" class="LineNr">297 </span> 7c/jump-if-< $print-int32-buffered:end/disp8
|
||||||
<span id="L298" class="LineNr">298 </span> <span class="subxComment"># eax = n >> ecx</span>
|
<span id="L298" class="LineNr">298 </span> <span class="subxComment"># eax = n >> ecx</span>
|
||||||
<span id="L299" class="LineNr">299 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
<span id="L299" class="LineNr">299 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
||||||
<span id="L300" class="LineNr">300 </span> d3/>>ecx 5/subop/pad-zeroes 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># shift eax right by ecx bits, padding zeroes</span>
|
<span id="L300" class="LineNr">300 </span> d3/>>ecx 5/subop/pad-zeroes 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># shift eax right by ecx bits, padding zeroes</span>
|
||||||
|
|
|
@ -83,13 +83,13 @@ if ('onhashchange' in window) {
|
||||||
<span id="L23" class="LineNr"> 23 </span> <span class="subxComment"># if s is empty return false</span>
|
<span id="L23" class="LineNr"> 23 </span> <span class="subxComment"># if s is empty return false</span>
|
||||||
<span id="L24" class="LineNr"> 24 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L24" class="LineNr"> 24 </span> b8/copy-to-eax 0/imm32/false
|
||||||
<span id="L25" class="LineNr"> 25 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L25" class="LineNr"> 25 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L26" class="LineNr"> 26 </span> 73/jump-if-greater-or-equal-unsigned $is-hex-int?:end/disp8
|
<span id="L26" class="LineNr"> 26 </span> 73/jump-if-addr>= $is-hex-int?:end/disp8
|
||||||
<span id="L27" class="LineNr"> 27 </span> <span class="subxComment"># skip past leading '-'</span>
|
<span id="L27" class="LineNr"> 27 </span> <span class="subxComment"># skip past leading '-'</span>
|
||||||
<span id="L28" class="LineNr"> 28 </span> <span class="subxS1Comment"># . if (*curr == '-') ++curr</span>
|
<span id="L28" class="LineNr"> 28 </span> <span class="subxS1Comment"># . if (*curr == '-') ++curr</span>
|
||||||
<span id="L29" class="LineNr"> 29 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
<span id="L29" class="LineNr"> 29 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
||||||
<span id="L30" class="LineNr"> 30 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span>
|
<span id="L30" class="LineNr"> 30 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span>
|
||||||
<span id="L31" class="LineNr"> 31 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x2d/imm32/- <span class="subxComment"># compare ebx</span>
|
<span id="L31" class="LineNr"> 31 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x2d/imm32/- <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L32" class="LineNr"> 32 </span> 75/jump-if-not-equal $is-hex-int?:initial-0/disp8
|
<span id="L32" class="LineNr"> 32 </span> 75/jump-if-!= $is-hex-int?:initial-0/disp8
|
||||||
<span id="L33" class="LineNr"> 33 </span> <span class="subxS1Comment"># . ++curr</span>
|
<span id="L33" class="LineNr"> 33 </span> <span class="subxS1Comment"># . ++curr</span>
|
||||||
<span id="L34" class="LineNr"> 34 </span> 41/increment-ecx
|
<span id="L34" class="LineNr"> 34 </span> 41/increment-ecx
|
||||||
<span id="L35" class="LineNr"> 35 </span> <span class="subxComment"># skip past leading '0x'</span>
|
<span id="L35" class="LineNr"> 35 </span> <span class="subxComment"># skip past leading '0x'</span>
|
||||||
|
@ -98,24 +98,24 @@ if ('onhashchange' in window) {
|
||||||
<span id="L38" class="LineNr"> 38 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
<span id="L38" class="LineNr"> 38 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
||||||
<span id="L39" class="LineNr"> 39 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span>
|
<span id="L39" class="LineNr"> 39 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span>
|
||||||
<span id="L40" class="LineNr"> 40 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x30/imm32/0 <span class="subxComment"># compare ebx</span>
|
<span id="L40" class="LineNr"> 40 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x30/imm32/0 <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L41" class="LineNr"> 41 </span> 75/jump-if-not-equal $is-hex-int?:<span class="Constant">loop</span>/disp8
|
<span id="L41" class="LineNr"> 41 </span> 75/jump-if-!= $is-hex-int?:<span class="Constant">loop</span>/disp8
|
||||||
<span id="L42" class="LineNr"> 42 </span> <span class="subxS1Comment"># . ++curr</span>
|
<span id="L42" class="LineNr"> 42 </span> <span class="subxS1Comment"># . ++curr</span>
|
||||||
<span id="L43" class="LineNr"> 43 </span> 41/increment-ecx
|
<span id="L43" class="LineNr"> 43 </span> 41/increment-ecx
|
||||||
<span id="L44" class="LineNr"> 44 </span><span class="Constant">$is-hex-int?:initial-0x</span>:
|
<span id="L44" class="LineNr"> 44 </span><span class="Constant">$is-hex-int?:initial-0x</span>:
|
||||||
<span id="L45" class="LineNr"> 45 </span> <span class="subxS1Comment"># . if (curr >= in->end) return true</span>
|
<span id="L45" class="LineNr"> 45 </span> <span class="subxS1Comment"># . if (curr >= in->end) return true</span>
|
||||||
<span id="L46" class="LineNr"> 46 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L46" class="LineNr"> 46 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L47" class="LineNr"> 47 </span> 73/jump-if-greater-or-equal-unsigned $is-hex-int?:true/disp8
|
<span id="L47" class="LineNr"> 47 </span> 73/jump-if-addr>= $is-hex-int?:true/disp8
|
||||||
<span id="L48" class="LineNr"> 48 </span> <span class="subxS1Comment"># . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again</span>
|
<span id="L48" class="LineNr"> 48 </span> <span class="subxS1Comment"># . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again</span>
|
||||||
<span id="L49" class="LineNr"> 49 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
<span id="L49" class="LineNr"> 49 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
||||||
<span id="L50" class="LineNr"> 50 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span>
|
<span id="L50" class="LineNr"> 50 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span>
|
||||||
<span id="L51" class="LineNr"> 51 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x78/imm32/x <span class="subxComment"># compare ebx</span>
|
<span id="L51" class="LineNr"> 51 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x78/imm32/x <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L52" class="LineNr"> 52 </span> 75/jump-if-not-equal $is-hex-int?:<span class="Constant">loop</span>/disp8
|
<span id="L52" class="LineNr"> 52 </span> 75/jump-if-!= $is-hex-int?:<span class="Constant">loop</span>/disp8
|
||||||
<span id="L53" class="LineNr"> 53 </span> <span class="subxS1Comment"># . ++curr</span>
|
<span id="L53" class="LineNr"> 53 </span> <span class="subxS1Comment"># . ++curr</span>
|
||||||
<span id="L54" class="LineNr"> 54 </span> 41/increment-ecx
|
<span id="L54" class="LineNr"> 54 </span> 41/increment-ecx
|
||||||
<span id="L55" class="LineNr"> 55 </span><span class="Constant">$is-hex-int?:loop</span>:
|
<span id="L55" class="LineNr"> 55 </span><span class="Constant">$is-hex-int?:loop</span>:
|
||||||
<span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># if (curr >= in->end) return true</span>
|
<span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># if (curr >= in->end) return true</span>
|
||||||
<span id="L57" class="LineNr"> 57 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L57" class="LineNr"> 57 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L58" class="LineNr"> 58 </span> 73/jump-if-greater-or-equal-unsigned $is-hex-int?:true/disp8
|
<span id="L58" class="LineNr"> 58 </span> 73/jump-if-addr>= $is-hex-int?:true/disp8
|
||||||
<span id="L59" class="LineNr"> 59 </span> <span class="subxComment"># var eax : boolean = is-hex-digit?(*curr)</span>
|
<span id="L59" class="LineNr"> 59 </span> <span class="subxComment"># var eax : boolean = is-hex-digit?(*curr)</span>
|
||||||
<span id="L60" class="LineNr"> 60 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L60" class="LineNr"> 60 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L61" class="LineNr"> 61 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L61" class="LineNr"> 61 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
|
@ -126,7 +126,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L66" class="LineNr"> 66 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L66" class="LineNr"> 66 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L67" class="LineNr"> 67 </span> <span class="subxComment"># if (eax == false) return false</span>
|
<span id="L67" class="LineNr"> 67 </span> <span class="subxComment"># if (eax == false) return false</span>
|
||||||
<span id="L68" class="LineNr"> 68 </span> 3d/compare-eax-and 0/imm32
|
<span id="L68" class="LineNr"> 68 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L69" class="LineNr"> 69 </span> 74/jump-if-equal $is-hex-int?:end/disp8
|
<span id="L69" class="LineNr"> 69 </span> 74/jump-if-= $is-hex-int?:end/disp8
|
||||||
<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># ++curr</span>
|
<span id="L70" class="LineNr"> 70 </span> <span class="subxComment"># ++curr</span>
|
||||||
<span id="L71" class="LineNr"> 71 </span> 41/increment-ecx
|
<span id="L71" class="LineNr"> 71 </span> 41/increment-ecx
|
||||||
<span id="L72" class="LineNr"> 72 </span> <span class="subxComment"># loop</span>
|
<span id="L72" class="LineNr"> 72 </span> <span class="subxComment"># loop</span>
|
||||||
|
@ -435,7 +435,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L375" class="LineNr">375 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L375" class="LineNr">375 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L376" class="LineNr">376 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L376" class="LineNr">376 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
<span id="L377" class="LineNr">377 </span> 3d/compare-eax-and 0x2d/imm32/-
|
<span id="L377" class="LineNr">377 </span> 3d/compare-eax-and 0x2d/imm32/-
|
||||||
<span id="L378" class="LineNr">378 </span> 75/jump-if-not-equal $parse-hex-int:initial-0/disp8
|
<span id="L378" class="LineNr">378 </span> 75/jump-if-!= $parse-hex-int:initial-0/disp8
|
||||||
<span id="L379" class="LineNr">379 </span> <span class="subxS1Comment"># . ++curr</span>
|
<span id="L379" class="LineNr">379 </span> <span class="subxS1Comment"># . ++curr</span>
|
||||||
<span id="L380" class="LineNr">380 </span> 41/increment-ecx
|
<span id="L380" class="LineNr">380 </span> 41/increment-ecx
|
||||||
<span id="L381" class="LineNr">381 </span> <span class="subxS1Comment"># . negate = true</span>
|
<span id="L381" class="LineNr">381 </span> <span class="subxS1Comment"># . negate = true</span>
|
||||||
|
@ -445,24 +445,24 @@ if ('onhashchange' in window) {
|
||||||
<span id="L385" class="LineNr">385 </span> <span class="subxS1Comment"># . if (*curr != '0') jump to loop</span>
|
<span id="L385" class="LineNr">385 </span> <span class="subxS1Comment"># . if (*curr != '0') jump to loop</span>
|
||||||
<span id="L386" class="LineNr">386 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L386" class="LineNr">386 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
<span id="L387" class="LineNr">387 </span> 3d/compare-eax-and 0x30/imm32/0
|
<span id="L387" class="LineNr">387 </span> 3d/compare-eax-and 0x30/imm32/0
|
||||||
<span id="L388" class="LineNr">388 </span> 75/jump-if-not-equal $parse-hex-int:<span class="Constant">loop</span>/disp8
|
<span id="L388" class="LineNr">388 </span> 75/jump-if-!= $parse-hex-int:<span class="Constant">loop</span>/disp8
|
||||||
<span id="L389" class="LineNr">389 </span> <span class="subxS1Comment"># . ++curr</span>
|
<span id="L389" class="LineNr">389 </span> <span class="subxS1Comment"># . ++curr</span>
|
||||||
<span id="L390" class="LineNr">390 </span> 41/increment-ecx
|
<span id="L390" class="LineNr">390 </span> 41/increment-ecx
|
||||||
<span id="L391" class="LineNr">391 </span><span class="Constant">$parse-hex-int:initial-0x</span>:
|
<span id="L391" class="LineNr">391 </span><span class="Constant">$parse-hex-int:initial-0x</span>:
|
||||||
<span id="L392" class="LineNr">392 </span> <span class="subxS1Comment"># . if (curr >= in->end) return result</span>
|
<span id="L392" class="LineNr">392 </span> <span class="subxS1Comment"># . if (curr >= in->end) return result</span>
|
||||||
<span id="L393" class="LineNr">393 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L393" class="LineNr">393 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L394" class="LineNr">394 </span> 73/jump-if-greater-or-equal-unsigned $parse-hex-int:end/disp8
|
<span id="L394" class="LineNr">394 </span> 73/jump-if-addr>= $parse-hex-int:end/disp8
|
||||||
<span id="L395" class="LineNr">395 </span> <span class="subxS1Comment"># . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again</span>
|
<span id="L395" class="LineNr">395 </span> <span class="subxS1Comment"># . if (*curr != 'x') jump to loop # the previous '0' is still valid so doesn't need to be checked again</span>
|
||||||
<span id="L396" class="LineNr">396 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L396" class="LineNr">396 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L397" class="LineNr">397 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L397" class="LineNr">397 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
<span id="L398" class="LineNr">398 </span> 3d/compare-eax-and 0x78/imm32/x
|
<span id="L398" class="LineNr">398 </span> 3d/compare-eax-and 0x78/imm32/x
|
||||||
<span id="L399" class="LineNr">399 </span> 75/jump-if-not-equal $parse-hex-int:<span class="Constant">loop</span>/disp8
|
<span id="L399" class="LineNr">399 </span> 75/jump-if-!= $parse-hex-int:<span class="Constant">loop</span>/disp8
|
||||||
<span id="L400" class="LineNr">400 </span> <span class="subxS1Comment"># . ++curr</span>
|
<span id="L400" class="LineNr">400 </span> <span class="subxS1Comment"># . ++curr</span>
|
||||||
<span id="L401" class="LineNr">401 </span> 41/increment-ecx
|
<span id="L401" class="LineNr">401 </span> 41/increment-ecx
|
||||||
<span id="L402" class="LineNr">402 </span><span class="Constant">$parse-hex-int:loop</span>:
|
<span id="L402" class="LineNr">402 </span><span class="Constant">$parse-hex-int:loop</span>:
|
||||||
<span id="L403" class="LineNr">403 </span> <span class="subxComment"># if (curr >= in->end) break</span>
|
<span id="L403" class="LineNr">403 </span> <span class="subxComment"># if (curr >= in->end) break</span>
|
||||||
<span id="L404" class="LineNr">404 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L404" class="LineNr">404 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L405" class="LineNr">405 </span> 73/jump-if-greater-or-equal-unsigned $parse-hex-int:negate/disp8
|
<span id="L405" class="LineNr">405 </span> 73/jump-if-addr>= $parse-hex-int:negate/disp8
|
||||||
<span id="L406" class="LineNr">406 </span> <span class="subxComment"># var eax : int = from-hex-char(*curr)</span>
|
<span id="L406" class="LineNr">406 </span> <span class="subxComment"># var eax : int = from-hex-char(*curr)</span>
|
||||||
<span id="L407" class="LineNr">407 </span> <span class="subxS2Comment"># . . copy arg to eax</span>
|
<span id="L407" class="LineNr">407 </span> <span class="subxS2Comment"># . . copy arg to eax</span>
|
||||||
<span id="L408" class="LineNr">408 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L408" class="LineNr">408 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
|
@ -478,7 +478,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L418" class="LineNr">418 </span><span class="Constant">$parse-hex-int:negate</span>:
|
<span id="L418" class="LineNr">418 </span><span class="Constant">$parse-hex-int:negate</span>:
|
||||||
<span id="L419" class="LineNr">419 </span> <span class="subxComment"># if (negate?) result = -result</span>
|
<span id="L419" class="LineNr">419 </span> <span class="subxComment"># if (negate?) result = -result</span>
|
||||||
<span id="L420" class="LineNr">420 </span> 81 7/subop/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32/false <span class="subxComment"># compare esi</span>
|
<span id="L420" class="LineNr">420 </span> 81 7/subop/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32/false <span class="subxComment"># compare esi</span>
|
||||||
<span id="L421" class="LineNr">421 </span> 74/jump-if-equal $parse-hex-int:end/disp8
|
<span id="L421" class="LineNr">421 </span> 74/jump-if-= $parse-hex-int:end/disp8
|
||||||
<span id="L422" class="LineNr">422 </span> f7 3/subop/negate 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># negate ebx</span>
|
<span id="L422" class="LineNr">422 </span> f7 3/subop/negate 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># negate ebx</span>
|
||||||
<span id="L423" class="LineNr">423 </span><span class="Constant">$parse-hex-int:end</span>:
|
<span id="L423" class="LineNr">423 </span><span class="Constant">$parse-hex-int:end</span>:
|
||||||
<span id="L424" class="LineNr">424 </span> <span class="subxComment"># return result</span>
|
<span id="L424" class="LineNr">424 </span> <span class="subxComment"># return result</span>
|
||||||
|
@ -707,18 +707,18 @@ if ('onhashchange' in window) {
|
||||||
<span id="L647" class="LineNr">647 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to ecx</span>
|
<span id="L647" class="LineNr">647 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to ecx</span>
|
||||||
<span id="L648" class="LineNr">648 </span> <span class="subxComment"># return false if c < '0'</span>
|
<span id="L648" class="LineNr">648 </span> <span class="subxComment"># return false if c < '0'</span>
|
||||||
<span id="L649" class="LineNr">649 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x30/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L649" class="LineNr">649 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x30/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L650" class="LineNr">650 </span> 7c/jump-if-lesser $is-hex-digit?:false/disp8
|
<span id="L650" class="LineNr">650 </span> 7c/jump-if-< $is-hex-digit?:false/disp8
|
||||||
<span id="L651" class="LineNr">651 </span> <span class="subxComment"># return true if c <= '9'</span>
|
<span id="L651" class="LineNr">651 </span> <span class="subxComment"># return true if c <= '9'</span>
|
||||||
<span id="L652" class="LineNr">652 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x39/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L652" class="LineNr">652 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x39/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L653" class="LineNr">653 </span> 7e/jump-if-lesser-or-equal $is-hex-digit?:true/disp8
|
<span id="L653" class="LineNr">653 </span> 7e/jump-if-<= $is-hex-digit?:true/disp8
|
||||||
<span id="L654" class="LineNr">654 </span> <span class="subxComment"># drop case</span>
|
<span id="L654" class="LineNr">654 </span> <span class="subxComment"># drop case</span>
|
||||||
<span id="L655" class="LineNr">655 </span> 25/and-eax-with 0x5f/imm32
|
<span id="L655" class="LineNr">655 </span> 25/and-eax-with 0x5f/imm32
|
||||||
<span id="L656" class="LineNr">656 </span> <span class="subxComment"># return false if c > 'f'</span>
|
<span id="L656" class="LineNr">656 </span> <span class="subxComment"># return false if c > 'f'</span>
|
||||||
<span id="L657" class="LineNr">657 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x66/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L657" class="LineNr">657 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x66/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L658" class="LineNr">658 </span> 7f/jump-if-greater $is-hex-digit?:false/disp8
|
<span id="L658" class="LineNr">658 </span> 7f/jump-if-> $is-hex-digit?:false/disp8
|
||||||
<span id="L659" class="LineNr">659 </span> <span class="subxComment"># return true if c >= 'a'</span>
|
<span id="L659" class="LineNr">659 </span> <span class="subxComment"># return true if c >= 'a'</span>
|
||||||
<span id="L660" class="LineNr">660 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x61/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L660" class="LineNr">660 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x61/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L661" class="LineNr">661 </span> 7d/jump-if-greater-or-equal $is-hex-digit?:true/disp8
|
<span id="L661" class="LineNr">661 </span> 7d/jump-if->= $is-hex-digit?:true/disp8
|
||||||
<span id="L662" class="LineNr">662 </span> <span class="subxComment"># otherwise return false</span>
|
<span id="L662" class="LineNr">662 </span> <span class="subxComment"># otherwise return false</span>
|
||||||
<span id="L663" class="LineNr">663 </span><span class="Constant">$is-hex-digit?:false</span>:
|
<span id="L663" class="LineNr">663 </span><span class="Constant">$is-hex-digit?:false</span>:
|
||||||
<span id="L664" class="LineNr">664 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L664" class="LineNr">664 </span> b8/copy-to-eax 0/imm32/false
|
||||||
|
@ -864,15 +864,15 @@ if ('onhashchange' in window) {
|
||||||
<span id="L804" class="LineNr">804 </span><span class="Constant">$from-hex-char:check0</span>:
|
<span id="L804" class="LineNr">804 </span><span class="Constant">$from-hex-char:check0</span>:
|
||||||
<span id="L805" class="LineNr">805 </span> <span class="subxComment"># if (eax < '0') goto abort</span>
|
<span id="L805" class="LineNr">805 </span> <span class="subxComment"># if (eax < '0') goto abort</span>
|
||||||
<span id="L806" class="LineNr">806 </span> 3d/compare-eax-with 0x30/imm32/0
|
<span id="L806" class="LineNr">806 </span> 3d/compare-eax-with 0x30/imm32/0
|
||||||
<span id="L807" class="LineNr">807 </span> 7c/jump-if-lesser $from-hex-char:abort/disp8
|
<span id="L807" class="LineNr">807 </span> 7c/jump-if-< $from-hex-char:abort/disp8
|
||||||
<span id="L808" class="LineNr">808 </span><span class="Constant">$from-hex-char:check1</span>:
|
<span id="L808" class="LineNr">808 </span><span class="Constant">$from-hex-char:check1</span>:
|
||||||
<span id="L809" class="LineNr">809 </span> <span class="subxComment"># if (eax > 'f') goto abort</span>
|
<span id="L809" class="LineNr">809 </span> <span class="subxComment"># if (eax > 'f') goto abort</span>
|
||||||
<span id="L810" class="LineNr">810 </span> 3d/compare-eax-with 0x66/imm32/f
|
<span id="L810" class="LineNr">810 </span> 3d/compare-eax-with 0x66/imm32/f
|
||||||
<span id="L811" class="LineNr">811 </span> 7f/jump-if-greater $from-hex-char:abort/disp8
|
<span id="L811" class="LineNr">811 </span> 7f/jump-if-> $from-hex-char:abort/disp8
|
||||||
<span id="L812" class="LineNr">812 </span><span class="Constant">$from-hex-char:check2</span>:
|
<span id="L812" class="LineNr">812 </span><span class="Constant">$from-hex-char:check2</span>:
|
||||||
<span id="L813" class="LineNr">813 </span> <span class="subxComment"># if (eax > '9') goto next check</span>
|
<span id="L813" class="LineNr">813 </span> <span class="subxComment"># if (eax > '9') goto next check</span>
|
||||||
<span id="L814" class="LineNr">814 </span> 3d/compare-eax-with 0x39/imm32/9
|
<span id="L814" class="LineNr">814 </span> 3d/compare-eax-with 0x39/imm32/9
|
||||||
<span id="L815" class="LineNr">815 </span> 7f/jump-if-greater $from-hex-char:check3/disp8
|
<span id="L815" class="LineNr">815 </span> 7f/jump-if-> $from-hex-char:check3/disp8
|
||||||
<span id="L816" class="LineNr">816 </span><span class="Constant">$from-hex-char:digit</span>:
|
<span id="L816" class="LineNr">816 </span><span class="Constant">$from-hex-char:digit</span>:
|
||||||
<span id="L817" class="LineNr">817 </span> <span class="subxComment"># return eax - '0'</span>
|
<span id="L817" class="LineNr">817 </span> <span class="subxComment"># return eax - '0'</span>
|
||||||
<span id="L818" class="LineNr">818 </span> 2d/subtract-from-eax 0x30/imm32/0
|
<span id="L818" class="LineNr">818 </span> 2d/subtract-from-eax 0x30/imm32/0
|
||||||
|
@ -880,7 +880,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L820" class="LineNr">820 </span><span class="Constant">$from-hex-char:check3</span>:
|
<span id="L820" class="LineNr">820 </span><span class="Constant">$from-hex-char:check3</span>:
|
||||||
<span id="L821" class="LineNr">821 </span> <span class="subxComment"># if (eax < 'a') goto abort</span>
|
<span id="L821" class="LineNr">821 </span> <span class="subxComment"># if (eax < 'a') goto abort</span>
|
||||||
<span id="L822" class="LineNr">822 </span> 3d/compare-eax-with 0x61/imm32/a
|
<span id="L822" class="LineNr">822 </span> 3d/compare-eax-with 0x61/imm32/a
|
||||||
<span id="L823" class="LineNr">823 </span> 7c/jump-if-lesser $from-hex-char:abort/disp8
|
<span id="L823" class="LineNr">823 </span> 7c/jump-if-< $from-hex-char:abort/disp8
|
||||||
<span id="L824" class="LineNr">824 </span><span class="Constant">$from-hex-char:letter</span>:
|
<span id="L824" class="LineNr">824 </span><span class="Constant">$from-hex-char:letter</span>:
|
||||||
<span id="L825" class="LineNr">825 </span> <span class="subxComment"># return eax - ('a'-10)</span>
|
<span id="L825" class="LineNr">825 </span> <span class="subxComment"># return eax - ('a'-10)</span>
|
||||||
<span id="L826" class="LineNr">826 </span> 2d/subtract-from-eax 0x57/imm32/a-10
|
<span id="L826" class="LineNr">826 </span> 2d/subtract-from-eax 0x57/imm32/a-10
|
||||||
|
|
|
@ -133,7 +133,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L72" class="LineNr"> 72 </span> 89/copy 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to edx</span>
|
<span id="L72" class="LineNr"> 72 </span> 89/copy 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to edx</span>
|
||||||
<span id="L73" class="LineNr"> 73 </span> 03/add 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># add *(ebp+12) to edx</span>
|
<span id="L73" class="LineNr"> 73 </span> 03/add 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># add *(ebp+12) to edx</span>
|
||||||
<span id="L74" class="LineNr"> 74 </span> 3b/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare edx with *(ecx+4)</span>
|
<span id="L74" class="LineNr"> 74 </span> 3b/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare edx with *(ecx+4)</span>
|
||||||
<span id="L75" class="LineNr"> 75 </span> 73/jump-if-greater-or-equal-signed $allocate:abort/disp8
|
<span id="L75" class="LineNr"> 75 </span> 73/jump-if->=-signed $allocate:abort/disp8
|
||||||
<span id="L76" class="LineNr"> 76 </span><span class="Constant">$allocate:commit</span>:
|
<span id="L76" class="LineNr"> 76 </span><span class="Constant">$allocate:commit</span>:
|
||||||
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># update ad->curr</span>
|
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># update ad->curr</span>
|
||||||
<span id="L78" class="LineNr"> 78 </span> 89/copy 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy edx to *ecx</span>
|
<span id="L78" class="LineNr"> 78 </span> 89/copy 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy edx to *ecx</span>
|
||||||
|
@ -257,7 +257,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L196" class="LineNr">196 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L196" class="LineNr">196 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L197" class="LineNr">197 </span> <span class="subxComment"># if (eax == 0) abort</span>
|
<span id="L197" class="LineNr">197 </span> <span class="subxComment"># if (eax == 0) abort</span>
|
||||||
<span id="L198" class="LineNr">198 </span> 3d/compare-eax-and 0/imm32
|
<span id="L198" class="LineNr">198 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L199" class="LineNr">199 </span> 74/jump-if-equal $allocate-region:abort/disp8
|
<span id="L199" class="LineNr">199 </span> 74/jump-if-= $allocate-region:abort/disp8
|
||||||
<span id="L200" class="LineNr">200 </span> <span class="subxComment"># earmark 8 bytes at the start for a new allocation descriptor</span>
|
<span id="L200" class="LineNr">200 </span> <span class="subxComment"># earmark 8 bytes at the start for a new allocation descriptor</span>
|
||||||
<span id="L201" class="LineNr">201 </span> <span class="subxS1Comment"># . *eax = eax + 8</span>
|
<span id="L201" class="LineNr">201 </span> <span class="subxS1Comment"># . *eax = eax + 8</span>
|
||||||
<span id="L202" class="LineNr">202 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to ecx</span>
|
<span id="L202" class="LineNr">202 </span> 89/copy 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to ecx</span>
|
||||||
|
|
|
@ -78,7 +78,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L19" class="LineNr"> 19 </span> f7 4/subop/multiply 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># multiply *(ebp+12) into eax</span>
|
<span id="L19" class="LineNr"> 19 </span> f7 4/subop/multiply 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># multiply *(ebp+12) into eax</span>
|
||||||
<span id="L20" class="LineNr"> 20 </span> <span class="subxS1Comment"># . if overflow abort</span>
|
<span id="L20" class="LineNr"> 20 </span> <span class="subxS1Comment"># . if overflow abort</span>
|
||||||
<span id="L21" class="LineNr"> 21 </span> 81 7/subop/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare edx</span>
|
<span id="L21" class="LineNr"> 21 </span> 81 7/subop/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare edx</span>
|
||||||
<span id="L22" class="LineNr"> 22 </span> 75/jump-if-not-equal $new-stream:abort/disp8
|
<span id="L22" class="LineNr"> 22 </span> 75/jump-if-!= $new-stream:abort/disp8
|
||||||
<span id="L23" class="LineNr"> 23 </span> <span class="subxS1Comment"># . edx = elemsize*length</span>
|
<span id="L23" class="LineNr"> 23 </span> <span class="subxS1Comment"># . edx = elemsize*length</span>
|
||||||
<span id="L24" class="LineNr"> 24 </span> 89/copy 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to edx</span>
|
<span id="L24" class="LineNr"> 24 </span> 89/copy 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy eax to edx</span>
|
||||||
<span id="L25" class="LineNr"> 25 </span> <span class="subxS1Comment"># . eax += 12</span>
|
<span id="L25" class="LineNr"> 25 </span> <span class="subxS1Comment"># . eax += 12</span>
|
||||||
|
|
|
@ -97,10 +97,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L37" class="LineNr"> 37 </span><span class="Constant">$read-line-buffered:loop</span>:
|
<span id="L37" class="LineNr"> 37 </span><span class="Constant">$read-line-buffered:loop</span>:
|
||||||
<span id="L38" class="LineNr"> 38 </span> <span class="subxComment"># if (s->write >= s->length) abort</span>
|
<span id="L38" class="LineNr"> 38 </span> <span class="subxComment"># if (s->write >= s->length) abort</span>
|
||||||
<span id="L39" class="LineNr"> 39 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare edx with *(edi+8)</span>
|
<span id="L39" class="LineNr"> 39 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare edx with *(edi+8)</span>
|
||||||
<span id="L40" class="LineNr"> 40 </span> 7d/jump-if-greater-or-equal $read-line-buffered:abort/disp8
|
<span id="L40" class="LineNr"> 40 </span> 7d/jump-if->= $read-line-buffered:abort/disp8
|
||||||
<span id="L41" class="LineNr"> 41 </span> <span class="subxComment"># if (f->read >= f->write) populate stream from file</span>
|
<span id="L41" class="LineNr"> 41 </span> <span class="subxComment"># if (f->read >= f->write) populate stream from file</span>
|
||||||
<span id="L42" class="LineNr"> 42 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
<span id="L42" class="LineNr"> 42 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
||||||
<span id="L43" class="LineNr"> 43 </span> 7c/jump-if-lesser $read-line-buffered:from-stream/disp8
|
<span id="L43" class="LineNr"> 43 </span> 7c/jump-if-< $read-line-buffered:from-stream/disp8
|
||||||
<span id="L44" class="LineNr"> 44 </span> <span class="subxS1Comment"># . clear-stream(stream = f+4)</span>
|
<span id="L44" class="LineNr"> 44 </span> <span class="subxS1Comment"># . clear-stream(stream = f+4)</span>
|
||||||
<span id="L45" class="LineNr"> 45 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L45" class="LineNr"> 45 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L46" class="LineNr"> 46 </span> 8d/copy-address 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+4 to eax</span>
|
<span id="L46" class="LineNr"> 46 </span> 8d/copy-address 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+4 to eax</span>
|
||||||
|
@ -123,7 +123,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># since f->read was initially 0, eax is the same as f->write</span>
|
<span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># since f->read was initially 0, eax is the same as f->write</span>
|
||||||
<span id="L64" class="LineNr"> 64 </span> <span class="subxS1Comment"># . if (eax == 0) return true</span>
|
<span id="L64" class="LineNr"> 64 </span> <span class="subxS1Comment"># . if (eax == 0) return true</span>
|
||||||
<span id="L65" class="LineNr"> 65 </span> 3d/compare-eax-and 0/imm32
|
<span id="L65" class="LineNr"> 65 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L66" class="LineNr"> 66 </span> 74/jump-if-equal $read-line-buffered:end/disp8
|
<span id="L66" class="LineNr"> 66 </span> 74/jump-if-= $read-line-buffered:end/disp8
|
||||||
<span id="L67" class="LineNr"> 67 </span><span class="Constant">$read-line-buffered:from-stream</span>:
|
<span id="L67" class="LineNr"> 67 </span><span class="Constant">$read-line-buffered:from-stream</span>:
|
||||||
<span id="L68" class="LineNr"> 68 </span> <span class="subxComment"># AL = f->data[f->read]</span>
|
<span id="L68" class="LineNr"> 68 </span> <span class="subxComment"># AL = f->data[f->read]</span>
|
||||||
<span id="L69" class="LineNr"> 69 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L69" class="LineNr"> 69 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
|
@ -136,7 +136,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L76" class="LineNr"> 76 </span> 42/increment-edx
|
<span id="L76" class="LineNr"> 76 </span> 42/increment-edx
|
||||||
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># if (AL == '\n') return</span>
|
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># if (AL == '\n') return</span>
|
||||||
<span id="L78" class="LineNr"> 78 </span> 3d/compare-eax-and 0xa/imm32
|
<span id="L78" class="LineNr"> 78 </span> 3d/compare-eax-and 0xa/imm32
|
||||||
<span id="L79" class="LineNr"> 79 </span> 75/jump-if-not-equal $read-line-buffered:<span class="Constant">loop</span>/disp8
|
<span id="L79" class="LineNr"> 79 </span> 75/jump-if-!= $read-line-buffered:<span class="Constant">loop</span>/disp8
|
||||||
<span id="L80" class="LineNr"> 80 </span><span class="Constant">$read-line-buffered:end</span>:
|
<span id="L80" class="LineNr"> 80 </span><span class="Constant">$read-line-buffered:end</span>:
|
||||||
<span id="L81" class="LineNr"> 81 </span> <span class="subxComment"># save f->read</span>
|
<span id="L81" class="LineNr"> 81 </span> <span class="subxComment"># save f->read</span>
|
||||||
<span id="L82" class="LineNr"> 82 </span> 89/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *(esi+8)</span>
|
<span id="L82" class="LineNr"> 82 </span> 89/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *(esi+8)</span>
|
||||||
|
@ -306,10 +306,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L246" class="LineNr">246 </span><span class="Constant">$read-line:loop</span>:
|
<span id="L246" class="LineNr">246 </span><span class="Constant">$read-line:loop</span>:
|
||||||
<span id="L247" class="LineNr">247 </span> <span class="subxComment"># if (s->write >= s->length) abort</span>
|
<span id="L247" class="LineNr">247 </span> <span class="subxComment"># if (s->write >= s->length) abort</span>
|
||||||
<span id="L248" class="LineNr">248 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare edx with *(edi+8)</span>
|
<span id="L248" class="LineNr">248 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare edx with *(edi+8)</span>
|
||||||
<span id="L249" class="LineNr">249 </span> 0f 8d/jump-if-greater-or-equal $read-line:abort/disp32
|
<span id="L249" class="LineNr">249 </span> 0f 8d/jump-if->= $read-line:abort/disp32
|
||||||
<span id="L250" class="LineNr">250 </span> <span class="subxComment"># if (f->read >= f->write) break</span>
|
<span id="L250" class="LineNr">250 </span> <span class="subxComment"># if (f->read >= f->write) break</span>
|
||||||
<span id="L251" class="LineNr">251 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *esi</span>
|
<span id="L251" class="LineNr">251 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *esi</span>
|
||||||
<span id="L252" class="LineNr">252 </span> 7d/jump-if-greater-or-equal $read-line:end/disp8
|
<span id="L252" class="LineNr">252 </span> 7d/jump-if->= $read-line:end/disp8
|
||||||
<span id="L253" class="LineNr">253 </span> <span class="subxComment"># AL = f->data[f->read]</span>
|
<span id="L253" class="LineNr">253 </span> <span class="subxComment"># AL = f->data[f->read]</span>
|
||||||
<span id="L254" class="LineNr">254 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L254" class="LineNr">254 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L255" class="LineNr">255 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
<span id="L255" class="LineNr">255 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
||||||
|
@ -321,7 +321,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L261" class="LineNr">261 </span> 42/increment-edx
|
<span id="L261" class="LineNr">261 </span> 42/increment-edx
|
||||||
<span id="L262" class="LineNr">262 </span> <span class="subxComment"># if (AL == '\n') return</span>
|
<span id="L262" class="LineNr">262 </span> <span class="subxComment"># if (AL == '\n') return</span>
|
||||||
<span id="L263" class="LineNr">263 </span> 3d/compare-eax-and 0xa/imm32
|
<span id="L263" class="LineNr">263 </span> 3d/compare-eax-and 0xa/imm32
|
||||||
<span id="L264" class="LineNr">264 </span> 0f 85/jump-if-not-equal $read-line:<span class="Constant">loop</span>/disp32
|
<span id="L264" class="LineNr">264 </span> 0f 85/jump-if-!= $read-line:<span class="Constant">loop</span>/disp32
|
||||||
<span id="L265" class="LineNr">265 </span><span class="Constant">$read-line:end</span>:
|
<span id="L265" class="LineNr">265 </span><span class="Constant">$read-line:end</span>:
|
||||||
<span id="L266" class="LineNr">266 </span> <span class="subxComment"># save f->read</span>
|
<span id="L266" class="LineNr">266 </span> <span class="subxComment"># save f->read</span>
|
||||||
<span id="L267" class="LineNr">267 </span> 89/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *(esi+4)</span>
|
<span id="L267" class="LineNr">267 </span> 89/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *(esi+4)</span>
|
||||||
|
|
|
@ -81,7 +81,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L20" class="LineNr"> 20 </span> <span class="subxS1Comment"># . compare eax and s->end</span>
|
<span id="L20" class="LineNr"> 20 </span> <span class="subxS1Comment"># . compare eax and s->end</span>
|
||||||
<span id="L21" class="LineNr"> 21 </span> 39/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare eax and *(ecx+4)</span>
|
<span id="L21" class="LineNr"> 21 </span> 39/compare 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare eax and *(ecx+4)</span>
|
||||||
<span id="L22" class="LineNr"> 22 </span> b8/copy-to-eax 1/imm32/true
|
<span id="L22" class="LineNr"> 22 </span> b8/copy-to-eax 1/imm32/true
|
||||||
<span id="L23" class="LineNr"> 23 </span> 74/jump-if-equal $slice-empty?:end/disp8
|
<span id="L23" class="LineNr"> 23 </span> 74/jump-if-= $slice-empty?:end/disp8
|
||||||
<span id="L24" class="LineNr"> 24 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L24" class="LineNr"> 24 </span> b8/copy-to-eax 0/imm32/false
|
||||||
<span id="L25" class="LineNr"> 25 </span><span class="Constant">$slice-empty?:end</span>:
|
<span id="L25" class="LineNr"> 25 </span><span class="Constant">$slice-empty?:end</span>:
|
||||||
<span id="L26" class="LineNr"> 26 </span> <span class="subxS1Comment"># . restore registers</span>
|
<span id="L26" class="LineNr"> 26 </span> <span class="subxS1Comment"># . restore registers</span>
|
||||||
|
@ -190,16 +190,16 @@ if ('onhashchange' in window) {
|
||||||
<span id="L129" class="LineNr"> 129 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to ebx</span>
|
<span id="L129" class="LineNr"> 129 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to ebx</span>
|
||||||
<span id="L130" class="LineNr"> 130 </span> <span class="subxComment"># if (p != 0) goto next check</span>
|
<span id="L130" class="LineNr"> 130 </span> <span class="subxComment"># if (p != 0) goto next check</span>
|
||||||
<span id="L131" class="LineNr"> 131 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ebx</span>
|
<span id="L131" class="LineNr"> 131 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L132" class="LineNr"> 132 </span> 75/jump-if-not-equal $slice-equal?:nonnull-string/disp8
|
<span id="L132" class="LineNr"> 132 </span> 75/jump-if-!= $slice-equal?:nonnull-string/disp8
|
||||||
<span id="L133" class="LineNr"> 133 </span><span class="Constant">$slice-equal?:null-string</span>:
|
<span id="L133" class="LineNr"> 133 </span><span class="Constant">$slice-equal?:null-string</span>:
|
||||||
<span id="L134" class="LineNr"> 134 </span> <span class="subxComment"># return s->start == s->end</span>
|
<span id="L134" class="LineNr"> 134 </span> <span class="subxComment"># return s->start == s->end</span>
|
||||||
<span id="L135" class="LineNr"> 135 </span> 3d/compare-eax-and 0/imm32
|
<span id="L135" class="LineNr"> 135 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L136" class="LineNr"> 136 </span> 74/jump-if-equal $slice-equal?:true/disp8
|
<span id="L136" class="LineNr"> 136 </span> 74/jump-if-= $slice-equal?:true/disp8
|
||||||
<span id="L137" class="LineNr"> 137 </span> eb/jump $slice-equal?:false/disp8
|
<span id="L137" class="LineNr"> 137 </span> eb/jump $slice-equal?:false/disp8
|
||||||
<span id="L138" class="LineNr"> 138 </span><span class="Constant">$slice-equal?:nonnull-string</span>:
|
<span id="L138" class="LineNr"> 138 </span><span class="Constant">$slice-equal?:nonnull-string</span>:
|
||||||
<span id="L139" class="LineNr"> 139 </span> <span class="subxComment"># if (slen != p->length) return false</span>
|
<span id="L139" class="LineNr"> 139 </span> <span class="subxComment"># if (slen != p->length) return false</span>
|
||||||
<span id="L140" class="LineNr"> 140 </span> 39/compare 0/mod/indirect 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare *ebx and eax</span>
|
<span id="L140" class="LineNr"> 140 </span> 39/compare 0/mod/indirect 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare *ebx and eax</span>
|
||||||
<span id="L141" class="LineNr"> 141 </span> 75/jump-if-not-equal $slice-equal?:false/disp8
|
<span id="L141" class="LineNr"> 141 </span> 75/jump-if-!= $slice-equal?:false/disp8
|
||||||
<span id="L142" class="LineNr"> 142 </span> <span class="subxComment"># var currp/ebx : (addr byte) = p->data</span>
|
<span id="L142" class="LineNr"> 142 </span> <span class="subxComment"># var currp/ebx : (addr byte) = p->data</span>
|
||||||
<span id="L143" class="LineNr"> 143 </span> 81 0/subop/add 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to ebx</span>
|
<span id="L143" class="LineNr"> 143 </span> 81 0/subop/add 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to ebx</span>
|
||||||
<span id="L144" class="LineNr"> 144 </span> <span class="subxComment"># var c1/eax : byte = 0</span>
|
<span id="L144" class="LineNr"> 144 </span> <span class="subxComment"># var c1/eax : byte = 0</span>
|
||||||
|
@ -209,14 +209,14 @@ if ('onhashchange' in window) {
|
||||||
<span id="L148" class="LineNr"> 148 </span><span class="Constant">$slice-equal?:loop</span>:
|
<span id="L148" class="LineNr"> 148 </span><span class="Constant">$slice-equal?:loop</span>:
|
||||||
<span id="L149" class="LineNr"> 149 </span> <span class="subxComment"># if (currs >= maxs) return true</span>
|
<span id="L149" class="LineNr"> 149 </span> <span class="subxComment"># if (currs >= maxs) return true</span>
|
||||||
<span id="L150" class="LineNr"> 150 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with esi</span>
|
<span id="L150" class="LineNr"> 150 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with esi</span>
|
||||||
<span id="L151" class="LineNr"> 151 </span> 73/jump-if-greater-or-equal-unsigned $slice-equal?:true/disp8
|
<span id="L151" class="LineNr"> 151 </span> 73/jump-if-addr>= $slice-equal?:true/disp8
|
||||||
<span id="L152" class="LineNr"> 152 </span> <span class="subxComment"># c1 = *currp</span>
|
<span id="L152" class="LineNr"> 152 </span> <span class="subxComment"># c1 = *currp</span>
|
||||||
<span id="L153" class="LineNr"> 153 </span> 8a/copy-byte 0/mod/indirect 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ebx to AL</span>
|
<span id="L153" class="LineNr"> 153 </span> 8a/copy-byte 0/mod/indirect 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ebx to AL</span>
|
||||||
<span id="L154" class="LineNr"> 154 </span> <span class="subxComment"># c2 = *currs</span>
|
<span id="L154" class="LineNr"> 154 </span> <span class="subxComment"># c2 = *currs</span>
|
||||||
<span id="L155" class="LineNr"> 155 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span>
|
<span id="L155" class="LineNr"> 155 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span>
|
||||||
<span id="L156" class="LineNr"> 156 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
<span id="L156" class="LineNr"> 156 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
||||||
<span id="L157" class="LineNr"> 157 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ecx</span>
|
<span id="L157" class="LineNr"> 157 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ecx</span>
|
||||||
<span id="L158" class="LineNr"> 158 </span> 75/jump-if-not-equal $slice-equal?:false/disp8
|
<span id="L158" class="LineNr"> 158 </span> 75/jump-if-!= $slice-equal?:false/disp8
|
||||||
<span id="L159" class="LineNr"> 159 </span> <span class="subxComment"># ++currp</span>
|
<span id="L159" class="LineNr"> 159 </span> <span class="subxComment"># ++currp</span>
|
||||||
<span id="L160" class="LineNr"> 160 </span> 43/increment-ebx
|
<span id="L160" class="LineNr"> 160 </span> 43/increment-ebx
|
||||||
<span id="L161" class="LineNr"> 161 </span> <span class="subxComment"># ++currs</span>
|
<span id="L161" class="LineNr"> 161 </span> <span class="subxComment"># ++currs</span>
|
||||||
|
@ -558,7 +558,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L497" class="LineNr"> 497 </span> 8b/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *edi to edx</span>
|
<span id="L497" class="LineNr"> 497 </span> 8b/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *edi to edx</span>
|
||||||
<span id="L498" class="LineNr"> 498 </span> <span class="subxComment"># if (lenh > lens) return false</span>
|
<span id="L498" class="LineNr"> 498 </span> <span class="subxComment"># if (lenh > lens) return false</span>
|
||||||
<span id="L499" class="LineNr"> 499 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with ecx</span>
|
<span id="L499" class="LineNr"> 499 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with ecx</span>
|
||||||
<span id="L500" class="LineNr"> 500 </span> 7f/jump-if-greater $slice-starts-with?:false/disp8
|
<span id="L500" class="LineNr"> 500 </span> 7f/jump-if-> $slice-starts-with?:false/disp8
|
||||||
<span id="L501" class="LineNr"> 501 </span> <span class="subxComment"># var currs/esi : (addr byte) = s->start</span>
|
<span id="L501" class="LineNr"> 501 </span> <span class="subxComment"># var currs/esi : (addr byte) = s->start</span>
|
||||||
<span id="L502" class="LineNr"> 502 </span> 8b/subtract 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to esi</span>
|
<span id="L502" class="LineNr"> 502 </span> 8b/subtract 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to esi</span>
|
||||||
<span id="L503" class="LineNr"> 503 </span> <span class="subxComment"># var currh/edi : (addr byte) = head->data</span>
|
<span id="L503" class="LineNr"> 503 </span> <span class="subxComment"># var currh/edi : (addr byte) = head->data</span>
|
||||||
|
@ -572,14 +572,14 @@ if ('onhashchange' in window) {
|
||||||
<span id="L511" class="LineNr"> 511 </span><span class="Constant">$slice-starts-with?:loop</span>:
|
<span id="L511" class="LineNr"> 511 </span><span class="Constant">$slice-starts-with?:loop</span>:
|
||||||
<span id="L512" class="LineNr"> 512 </span> <span class="subxComment"># if (i >= lenh) return true</span>
|
<span id="L512" class="LineNr"> 512 </span> <span class="subxComment"># if (i >= lenh) return true</span>
|
||||||
<span id="L513" class="LineNr"> 513 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L513" class="LineNr"> 513 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L514" class="LineNr"> 514 </span> 7d/jump-if-greater-or-equal $slice-starts-with?:true/disp8
|
<span id="L514" class="LineNr"> 514 </span> 7d/jump-if->= $slice-starts-with?:true/disp8
|
||||||
<span id="L515" class="LineNr"> 515 </span> <span class="subxComment"># c1 = *currs</span>
|
<span id="L515" class="LineNr"> 515 </span> <span class="subxComment"># c1 = *currs</span>
|
||||||
<span id="L516" class="LineNr"> 516 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
<span id="L516" class="LineNr"> 516 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
||||||
<span id="L517" class="LineNr"> 517 </span> <span class="subxComment"># c2 = *currh</span>
|
<span id="L517" class="LineNr"> 517 </span> <span class="subxComment"># c2 = *currh</span>
|
||||||
<span id="L518" class="LineNr"> 518 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to BL</span>
|
<span id="L518" class="LineNr"> 518 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to BL</span>
|
||||||
<span id="L519" class="LineNr"> 519 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
<span id="L519" class="LineNr"> 519 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
||||||
<span id="L520" class="LineNr"> 520 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
<span id="L520" class="LineNr"> 520 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
||||||
<span id="L521" class="LineNr"> 521 </span> 75/jump-if-not-equal $slice-starts-with?:false/disp8
|
<span id="L521" class="LineNr"> 521 </span> 75/jump-if-!= $slice-starts-with?:false/disp8
|
||||||
<span id="L522" class="LineNr"> 522 </span> <span class="subxComment"># ++i</span>
|
<span id="L522" class="LineNr"> 522 </span> <span class="subxComment"># ++i</span>
|
||||||
<span id="L523" class="LineNr"> 523 </span> 41/increment-ecx
|
<span id="L523" class="LineNr"> 523 </span> 41/increment-ecx
|
||||||
<span id="L524" class="LineNr"> 524 </span> <span class="subxComment"># ++currs</span>
|
<span id="L524" class="LineNr"> 524 </span> <span class="subxComment"># ++currs</span>
|
||||||
|
@ -848,10 +848,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L787" class="LineNr"> 787 </span><span class="Constant">$write-slice:loop</span>:
|
<span id="L787" class="LineNr"> 787 </span><span class="Constant">$write-slice:loop</span>:
|
||||||
<span id="L788" class="LineNr"> 788 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L788" class="LineNr"> 788 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L789" class="LineNr"> 789 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with esi</span>
|
<span id="L789" class="LineNr"> 789 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with esi</span>
|
||||||
<span id="L790" class="LineNr"> 790 </span> 73/jump-if-greater-or-equal-unsigned $write-slice:loop-end/disp8
|
<span id="L790" class="LineNr"> 790 </span> 73/jump-if-addr>= $write-slice:loop-end/disp8
|
||||||
<span id="L791" class="LineNr"> 791 </span> <span class="subxComment"># if (out->write >= out->length) abort</span>
|
<span id="L791" class="LineNr"> 791 </span> <span class="subxComment"># if (out->write >= out->length) abort</span>
|
||||||
<span id="L792" class="LineNr"> 792 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx with edx</span>
|
<span id="L792" class="LineNr"> 792 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx with edx</span>
|
||||||
<span id="L793" class="LineNr"> 793 </span> 7d/jump-if-greater-or-equal $write-slice:abort/disp8
|
<span id="L793" class="LineNr"> 793 </span> 7d/jump-if->= $write-slice:abort/disp8
|
||||||
<span id="L794" class="LineNr"> 794 </span> <span class="subxComment"># out->data[out->write] = *in</span>
|
<span id="L794" class="LineNr"> 794 </span> <span class="subxComment"># out->data[out->write] = *in</span>
|
||||||
<span id="L795" class="LineNr"> 795 </span> <span class="subxS1Comment"># . AL = *in</span>
|
<span id="L795" class="LineNr"> 795 </span> <span class="subxS1Comment"># . AL = *in</span>
|
||||||
<span id="L796" class="LineNr"> 796 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L796" class="LineNr"> 796 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
|
@ -964,10 +964,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L903" class="LineNr"> 903 </span><span class="Constant">$write-slice-buffered:loop</span>:
|
<span id="L903" class="LineNr"> 903 </span><span class="Constant">$write-slice-buffered:loop</span>:
|
||||||
<span id="L904" class="LineNr"> 904 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L904" class="LineNr"> 904 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L905" class="LineNr"> 905 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with esi</span>
|
<span id="L905" class="LineNr"> 905 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with esi</span>
|
||||||
<span id="L906" class="LineNr"> 906 </span> 73/jump-if-greater-or-equal-unsigned $write-slice-buffered:loop-end/disp8
|
<span id="L906" class="LineNr"> 906 </span> 73/jump-if-addr>= $write-slice-buffered:loop-end/disp8
|
||||||
<span id="L907" class="LineNr"> 907 </span> <span class="subxComment"># if (out->write >= out->length) flush and clear out's stream</span>
|
<span id="L907" class="LineNr"> 907 </span> <span class="subxComment"># if (out->write >= out->length) flush and clear out's stream</span>
|
||||||
<span id="L908" class="LineNr"> 908 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx with edx</span>
|
<span id="L908" class="LineNr"> 908 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx with edx</span>
|
||||||
<span id="L909" class="LineNr"> 909 </span> 7c/jump-if-lesser $write-slice-buffered:to-stream/disp8
|
<span id="L909" class="LineNr"> 909 </span> 7c/jump-if-< $write-slice-buffered:to-stream/disp8
|
||||||
<span id="L910" class="LineNr"> 910 </span> <span class="subxS1Comment"># . persist out->write</span>
|
<span id="L910" class="LineNr"> 910 </span> <span class="subxS1Comment"># . persist out->write</span>
|
||||||
<span id="L911" class="LineNr"> 911 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ebx to *(edi+4)</span>
|
<span id="L911" class="LineNr"> 911 </span> 89/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ebx to *(edi+4)</span>
|
||||||
<span id="L912" class="LineNr"> 912 </span> <span class="subxS1Comment"># . flush(out)</span>
|
<span id="L912" class="LineNr"> 912 </span> <span class="subxS1Comment"># . flush(out)</span>
|
||||||
|
@ -1102,7 +1102,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1041" class="LineNr">1041 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L1041" class="LineNr">1041 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L1042" class="LineNr">1042 </span> <span class="subxComment"># if (eax == 0) abort</span>
|
<span id="L1042" class="LineNr">1042 </span> <span class="subxComment"># if (eax == 0) abort</span>
|
||||||
<span id="L1043" class="LineNr">1043 </span> 3d/compare-eax-and 0/imm32
|
<span id="L1043" class="LineNr">1043 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L1044" class="LineNr">1044 </span> 74/jump-if-equal $slice-to-string:abort/disp8
|
<span id="L1044" class="LineNr">1044 </span> 74/jump-if-= $slice-to-string:abort/disp8
|
||||||
<span id="L1045" class="LineNr">1045 </span> <span class="subxComment"># out->length = size-4</span>
|
<span id="L1045" class="LineNr">1045 </span> <span class="subxComment"># out->length = size-4</span>
|
||||||
<span id="L1046" class="LineNr">1046 </span> 89/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *eax</span>
|
<span id="L1046" class="LineNr">1046 </span> 89/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *eax</span>
|
||||||
<span id="L1047" class="LineNr">1047 </span> 81 5/subop/subtract 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># subtract 4 from *eax</span>
|
<span id="L1047" class="LineNr">1047 </span> 81 5/subop/subtract 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># subtract 4 from *eax</span>
|
||||||
|
|
|
@ -418,13 +418,13 @@ if ('onhashchange' in window) {
|
||||||
<span id="L359" class="LineNr"> 359 </span><span class="Constant">$skip-chars-matching:loop</span>:
|
<span id="L359" class="LineNr"> 359 </span><span class="Constant">$skip-chars-matching:loop</span>:
|
||||||
<span id="L360" class="LineNr"> 360 </span> <span class="subxComment"># if (in->read >= in->write) break</span>
|
<span id="L360" class="LineNr"> 360 </span> <span class="subxComment"># if (in->read >= in->write) break</span>
|
||||||
<span id="L361" class="LineNr"> 361 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
<span id="L361" class="LineNr"> 361 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
||||||
<span id="L362" class="LineNr"> 362 </span> 7d/jump-if-greater-or-equal $skip-chars-matching:end/disp8
|
<span id="L362" class="LineNr"> 362 </span> 7d/jump-if->= $skip-chars-matching:end/disp8
|
||||||
<span id="L363" class="LineNr"> 363 </span> <span class="subxComment"># eax = in->data[in->read]</span>
|
<span id="L363" class="LineNr"> 363 </span> <span class="subxComment"># eax = in->data[in->read]</span>
|
||||||
<span id="L364" class="LineNr"> 364 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L364" class="LineNr"> 364 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L365" class="LineNr"> 365 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
<span id="L365" class="LineNr"> 365 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
||||||
<span id="L366" class="LineNr"> 366 </span> <span class="subxComment"># if (eax != delimiter) break</span>
|
<span id="L366" class="LineNr"> 366 </span> <span class="subxComment"># if (eax != delimiter) break</span>
|
||||||
<span id="L367" class="LineNr"> 367 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and edx</span>
|
<span id="L367" class="LineNr"> 367 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and edx</span>
|
||||||
<span id="L368" class="LineNr"> 368 </span> 75/jump-if-not-equal $skip-chars-matching:end/disp8
|
<span id="L368" class="LineNr"> 368 </span> 75/jump-if-!= $skip-chars-matching:end/disp8
|
||||||
<span id="L369" class="LineNr"> 369 </span> <span class="subxComment"># ++in->read</span>
|
<span id="L369" class="LineNr"> 369 </span> <span class="subxComment"># ++in->read</span>
|
||||||
<span id="L370" class="LineNr"> 370 </span> 41/increment-ecx
|
<span id="L370" class="LineNr"> 370 </span> 41/increment-ecx
|
||||||
<span id="L371" class="LineNr"> 371 </span> eb/jump $skip-chars-matching:<span class="Constant">loop</span>/disp8
|
<span id="L371" class="LineNr"> 371 </span> eb/jump $skip-chars-matching:<span class="Constant">loop</span>/disp8
|
||||||
|
@ -538,22 +538,22 @@ if ('onhashchange' in window) {
|
||||||
<span id="L479" class="LineNr"> 479 </span><span class="Constant">$skip-chars-matching-whitespace:loop</span>:
|
<span id="L479" class="LineNr"> 479 </span><span class="Constant">$skip-chars-matching-whitespace:loop</span>:
|
||||||
<span id="L480" class="LineNr"> 480 </span> <span class="subxComment"># if (in->read >= in->write) break</span>
|
<span id="L480" class="LineNr"> 480 </span> <span class="subxComment"># if (in->read >= in->write) break</span>
|
||||||
<span id="L481" class="LineNr"> 481 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
<span id="L481" class="LineNr"> 481 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
||||||
<span id="L482" class="LineNr"> 482 </span> 7d/jump-if-greater-or-equal $skip-chars-matching-whitespace:end/disp8
|
<span id="L482" class="LineNr"> 482 </span> 7d/jump-if->= $skip-chars-matching-whitespace:end/disp8
|
||||||
<span id="L483" class="LineNr"> 483 </span> <span class="subxComment"># eax = in->data[in->read]</span>
|
<span id="L483" class="LineNr"> 483 </span> <span class="subxComment"># eax = in->data[in->read]</span>
|
||||||
<span id="L484" class="LineNr"> 484 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L484" class="LineNr"> 484 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L485" class="LineNr"> 485 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
<span id="L485" class="LineNr"> 485 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
||||||
<span id="L486" class="LineNr"> 486 </span> <span class="subxComment"># if (eax == ' ') goto body</span>
|
<span id="L486" class="LineNr"> 486 </span> <span class="subxComment"># if (eax == ' ') goto body</span>
|
||||||
<span id="L487" class="LineNr"> 487 </span> 3d/compare-eax-and 0x20/imm32/space
|
<span id="L487" class="LineNr"> 487 </span> 3d/compare-eax-and 0x20/imm32/space
|
||||||
<span id="L488" class="LineNr"> 488 </span> 74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
|
<span id="L488" class="LineNr"> 488 </span> 74/jump-if-= $skip-chars-matching-whitespace:body/disp8
|
||||||
<span id="L489" class="LineNr"> 489 </span> <span class="subxComment"># if (eax == '\n') goto body</span>
|
<span id="L489" class="LineNr"> 489 </span> <span class="subxComment"># if (eax == '\n') goto body</span>
|
||||||
<span id="L490" class="LineNr"> 490 </span> 3d/compare-eax-and 0x0a/imm32/newline
|
<span id="L490" class="LineNr"> 490 </span> 3d/compare-eax-and 0x0a/imm32/newline
|
||||||
<span id="L491" class="LineNr"> 491 </span> 74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
|
<span id="L491" class="LineNr"> 491 </span> 74/jump-if-= $skip-chars-matching-whitespace:body/disp8
|
||||||
<span id="L492" class="LineNr"> 492 </span> <span class="subxComment"># if (eax == '\t') goto body</span>
|
<span id="L492" class="LineNr"> 492 </span> <span class="subxComment"># if (eax == '\t') goto body</span>
|
||||||
<span id="L493" class="LineNr"> 493 </span> 3d/compare-eax-and 0x09/imm32/tab
|
<span id="L493" class="LineNr"> 493 </span> 3d/compare-eax-and 0x09/imm32/tab
|
||||||
<span id="L494" class="LineNr"> 494 </span> 74/jump-if-equal $skip-chars-matching-whitespace:body/disp8
|
<span id="L494" class="LineNr"> 494 </span> 74/jump-if-= $skip-chars-matching-whitespace:body/disp8
|
||||||
<span id="L495" class="LineNr"> 495 </span> <span class="subxComment"># if (eax != '\r') break</span>
|
<span id="L495" class="LineNr"> 495 </span> <span class="subxComment"># if (eax != '\r') break</span>
|
||||||
<span id="L496" class="LineNr"> 496 </span> 3d/compare-eax-and 0x0d/imm32/cr
|
<span id="L496" class="LineNr"> 496 </span> 3d/compare-eax-and 0x0d/imm32/cr
|
||||||
<span id="L497" class="LineNr"> 497 </span> 75/jump-if-not-equal $skip-chars-matching-whitespace:end/disp8
|
<span id="L497" class="LineNr"> 497 </span> 75/jump-if-!= $skip-chars-matching-whitespace:end/disp8
|
||||||
<span id="L498" class="LineNr"> 498 </span><span class="Constant">$skip-chars-matching-whitespace:body</span>:
|
<span id="L498" class="LineNr"> 498 </span><span class="Constant">$skip-chars-matching-whitespace:body</span>:
|
||||||
<span id="L499" class="LineNr"> 499 </span> <span class="subxComment"># ++in->read</span>
|
<span id="L499" class="LineNr"> 499 </span> <span class="subxComment"># ++in->read</span>
|
||||||
<span id="L500" class="LineNr"> 500 </span> 41/increment-ecx
|
<span id="L500" class="LineNr"> 500 </span> 41/increment-ecx
|
||||||
|
@ -631,13 +631,13 @@ if ('onhashchange' in window) {
|
||||||
<span id="L572" class="LineNr"> 572 </span><span class="Constant">$skip-chars-not-matching:loop</span>:
|
<span id="L572" class="LineNr"> 572 </span><span class="Constant">$skip-chars-not-matching:loop</span>:
|
||||||
<span id="L573" class="LineNr"> 573 </span> <span class="subxComment"># if (in->read >= in->write) break</span>
|
<span id="L573" class="LineNr"> 573 </span> <span class="subxComment"># if (in->read >= in->write) break</span>
|
||||||
<span id="L574" class="LineNr"> 574 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
<span id="L574" class="LineNr"> 574 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
||||||
<span id="L575" class="LineNr"> 575 </span> 7d/jump-if-greater-or-equal $skip-chars-not-matching:end/disp8
|
<span id="L575" class="LineNr"> 575 </span> 7d/jump-if->= $skip-chars-not-matching:end/disp8
|
||||||
<span id="L576" class="LineNr"> 576 </span> <span class="subxComment"># eax = in->data[in->read]</span>
|
<span id="L576" class="LineNr"> 576 </span> <span class="subxComment"># eax = in->data[in->read]</span>
|
||||||
<span id="L577" class="LineNr"> 577 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L577" class="LineNr"> 577 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L578" class="LineNr"> 578 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
<span id="L578" class="LineNr"> 578 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
||||||
<span id="L579" class="LineNr"> 579 </span> <span class="subxComment"># if (eax == delimiter) break</span>
|
<span id="L579" class="LineNr"> 579 </span> <span class="subxComment"># if (eax == delimiter) break</span>
|
||||||
<span id="L580" class="LineNr"> 580 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and edx</span>
|
<span id="L580" class="LineNr"> 580 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and edx</span>
|
||||||
<span id="L581" class="LineNr"> 581 </span> 74/jump-if-equal $skip-chars-not-matching:end/disp8
|
<span id="L581" class="LineNr"> 581 </span> 74/jump-if-= $skip-chars-not-matching:end/disp8
|
||||||
<span id="L582" class="LineNr"> 582 </span> <span class="subxComment"># ++in->read</span>
|
<span id="L582" class="LineNr"> 582 </span> <span class="subxComment"># ++in->read</span>
|
||||||
<span id="L583" class="LineNr"> 583 </span> 41/increment-ecx
|
<span id="L583" class="LineNr"> 583 </span> 41/increment-ecx
|
||||||
<span id="L584" class="LineNr"> 584 </span> eb/jump $skip-chars-not-matching:<span class="Constant">loop</span>/disp8
|
<span id="L584" class="LineNr"> 584 </span> eb/jump $skip-chars-not-matching:<span class="Constant">loop</span>/disp8
|
||||||
|
@ -790,22 +790,22 @@ if ('onhashchange' in window) {
|
||||||
<span id="L731" class="LineNr"> 731 </span><span class="Constant">$skip-chars-not-matching-whitespace:loop</span>:
|
<span id="L731" class="LineNr"> 731 </span><span class="Constant">$skip-chars-not-matching-whitespace:loop</span>:
|
||||||
<span id="L732" class="LineNr"> 732 </span> <span class="subxComment"># if (in->read >= in->write) break</span>
|
<span id="L732" class="LineNr"> 732 </span> <span class="subxComment"># if (in->read >= in->write) break</span>
|
||||||
<span id="L733" class="LineNr"> 733 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
<span id="L733" class="LineNr"> 733 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
||||||
<span id="L734" class="LineNr"> 734 </span> 7d/jump-if-greater-or-equal $skip-chars-not-matching-whitespace:end/disp8
|
<span id="L734" class="LineNr"> 734 </span> 7d/jump-if->= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
<span id="L735" class="LineNr"> 735 </span> <span class="subxComment"># eax = in->data[in->read]</span>
|
<span id="L735" class="LineNr"> 735 </span> <span class="subxComment"># eax = in->data[in->read]</span>
|
||||||
<span id="L736" class="LineNr"> 736 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L736" class="LineNr"> 736 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L737" class="LineNr"> 737 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
<span id="L737" class="LineNr"> 737 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
||||||
<span id="L738" class="LineNr"> 738 </span> <span class="subxComment"># if (eax == ' ') break</span>
|
<span id="L738" class="LineNr"> 738 </span> <span class="subxComment"># if (eax == ' ') break</span>
|
||||||
<span id="L739" class="LineNr"> 739 </span> 3d/compare-eax-and 0x20/imm32/space
|
<span id="L739" class="LineNr"> 739 </span> 3d/compare-eax-and 0x20/imm32/space
|
||||||
<span id="L740" class="LineNr"> 740 </span> 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
|
<span id="L740" class="LineNr"> 740 </span> 74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
<span id="L741" class="LineNr"> 741 </span> <span class="subxComment"># if (eax == '\n') break</span>
|
<span id="L741" class="LineNr"> 741 </span> <span class="subxComment"># if (eax == '\n') break</span>
|
||||||
<span id="L742" class="LineNr"> 742 </span> 3d/compare-eax-and 0x0a/imm32/newline
|
<span id="L742" class="LineNr"> 742 </span> 3d/compare-eax-and 0x0a/imm32/newline
|
||||||
<span id="L743" class="LineNr"> 743 </span> 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
|
<span id="L743" class="LineNr"> 743 </span> 74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
<span id="L744" class="LineNr"> 744 </span> <span class="subxComment"># if (eax == '\t') break</span>
|
<span id="L744" class="LineNr"> 744 </span> <span class="subxComment"># if (eax == '\t') break</span>
|
||||||
<span id="L745" class="LineNr"> 745 </span> 3d/compare-eax-and 0x09/imm32/tab
|
<span id="L745" class="LineNr"> 745 </span> 3d/compare-eax-and 0x09/imm32/tab
|
||||||
<span id="L746" class="LineNr"> 746 </span> 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
|
<span id="L746" class="LineNr"> 746 </span> 74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
<span id="L747" class="LineNr"> 747 </span> <span class="subxComment"># if (eax == '\r') break</span>
|
<span id="L747" class="LineNr"> 747 </span> <span class="subxComment"># if (eax == '\r') break</span>
|
||||||
<span id="L748" class="LineNr"> 748 </span> 3d/compare-eax-and 0x0d/imm32/cr
|
<span id="L748" class="LineNr"> 748 </span> 3d/compare-eax-and 0x0d/imm32/cr
|
||||||
<span id="L749" class="LineNr"> 749 </span> 74/jump-if-equal $skip-chars-not-matching-whitespace:end/disp8
|
<span id="L749" class="LineNr"> 749 </span> 74/jump-if-= $skip-chars-not-matching-whitespace:end/disp8
|
||||||
<span id="L750" class="LineNr"> 750 </span> <span class="subxComment"># ++in->read</span>
|
<span id="L750" class="LineNr"> 750 </span> <span class="subxComment"># ++in->read</span>
|
||||||
<span id="L751" class="LineNr"> 751 </span> 41/increment-ecx
|
<span id="L751" class="LineNr"> 751 </span> 41/increment-ecx
|
||||||
<span id="L752" class="LineNr"> 752 </span> eb/jump $skip-chars-not-matching-whitespace:<span class="Constant">loop</span>/disp8
|
<span id="L752" class="LineNr"> 752 </span> eb/jump $skip-chars-not-matching-whitespace:<span class="Constant">loop</span>/disp8
|
||||||
|
@ -879,12 +879,12 @@ if ('onhashchange' in window) {
|
||||||
<span id="L820" class="LineNr"> 820 </span><span class="Constant">$skip-chars-matching-in-slice:loop</span>:
|
<span id="L820" class="LineNr"> 820 </span><span class="Constant">$skip-chars-matching-in-slice:loop</span>:
|
||||||
<span id="L821" class="LineNr"> 821 </span> <span class="subxComment"># if (curr >= end) break</span>
|
<span id="L821" class="LineNr"> 821 </span> <span class="subxComment"># if (curr >= end) break</span>
|
||||||
<span id="L822" class="LineNr"> 822 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
<span id="L822" class="LineNr"> 822 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
||||||
<span id="L823" class="LineNr"> 823 </span> 73/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp8
|
<span id="L823" class="LineNr"> 823 </span> 73/jump-if-addr>= $skip-chars-matching-in-slice:end/disp8
|
||||||
<span id="L824" class="LineNr"> 824 </span> <span class="subxComment"># c = *curr</span>
|
<span id="L824" class="LineNr"> 824 </span> <span class="subxComment"># c = *curr</span>
|
||||||
<span id="L825" class="LineNr"> 825 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to BL</span>
|
<span id="L825" class="LineNr"> 825 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to BL</span>
|
||||||
<span id="L826" class="LineNr"> 826 </span> <span class="subxComment"># if (c != delimiter) break</span>
|
<span id="L826" class="LineNr"> 826 </span> <span class="subxComment"># if (c != delimiter) break</span>
|
||||||
<span id="L827" class="LineNr"> 827 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx and edx</span>
|
<span id="L827" class="LineNr"> 827 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx and edx</span>
|
||||||
<span id="L828" class="LineNr"> 828 </span> 75/jump-if-not-equal $skip-chars-matching-in-slice:end/disp8
|
<span id="L828" class="LineNr"> 828 </span> 75/jump-if-!= $skip-chars-matching-in-slice:end/disp8
|
||||||
<span id="L829" class="LineNr"> 829 </span> <span class="subxComment"># ++curr</span>
|
<span id="L829" class="LineNr"> 829 </span> <span class="subxComment"># ++curr</span>
|
||||||
<span id="L830" class="LineNr"> 830 </span> 40/increment-eax
|
<span id="L830" class="LineNr"> 830 </span> 40/increment-eax
|
||||||
<span id="L831" class="LineNr"> 831 </span> eb/jump $skip-chars-matching-in-slice:<span class="Constant">loop</span>/disp8
|
<span id="L831" class="LineNr"> 831 </span> eb/jump $skip-chars-matching-in-slice:<span class="Constant">loop</span>/disp8
|
||||||
|
@ -972,21 +972,21 @@ if ('onhashchange' in window) {
|
||||||
<span id="L913" class="LineNr"> 913 </span><span class="Constant">$skip-chars-matching-whitespace-in-slice:loop</span>:
|
<span id="L913" class="LineNr"> 913 </span><span class="Constant">$skip-chars-matching-whitespace-in-slice:loop</span>:
|
||||||
<span id="L914" class="LineNr"> 914 </span> <span class="subxComment"># if (curr >= end) break</span>
|
<span id="L914" class="LineNr"> 914 </span> <span class="subxComment"># if (curr >= end) break</span>
|
||||||
<span id="L915" class="LineNr"> 915 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
<span id="L915" class="LineNr"> 915 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
||||||
<span id="L916" class="LineNr"> 916 </span> 0f 83/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp32
|
<span id="L916" class="LineNr"> 916 </span> 0f 83/jump-if-addr>= $skip-chars-matching-in-slice:end/disp32
|
||||||
<span id="L917" class="LineNr"> 917 </span> <span class="subxComment"># c = *curr</span>
|
<span id="L917" class="LineNr"> 917 </span> <span class="subxComment"># c = *curr</span>
|
||||||
<span id="L918" class="LineNr"> 918 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to BL</span>
|
<span id="L918" class="LineNr"> 918 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to BL</span>
|
||||||
<span id="L919" class="LineNr"> 919 </span> <span class="subxComment"># if (c == ' ') goto body</span>
|
<span id="L919" class="LineNr"> 919 </span> <span class="subxComment"># if (c == ' ') goto body</span>
|
||||||
<span id="L920" class="LineNr"> 920 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x20/imm32/space <span class="subxComment"># compare ebx</span>
|
<span id="L920" class="LineNr"> 920 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x20/imm32/space <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L921" class="LineNr"> 921 </span> 74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
|
<span id="L921" class="LineNr"> 921 </span> 74/jump-if-= $skip-chars-matching-whitespace-in-slice:body/disp8
|
||||||
<span id="L922" class="LineNr"> 922 </span> <span class="subxComment"># if (c == '\n') goto body</span>
|
<span id="L922" class="LineNr"> 922 </span> <span class="subxComment"># if (c == '\n') goto body</span>
|
||||||
<span id="L923" class="LineNr"> 923 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x0a/imm32/newline <span class="subxComment"># compare ebx</span>
|
<span id="L923" class="LineNr"> 923 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x0a/imm32/newline <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L924" class="LineNr"> 924 </span> 74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
|
<span id="L924" class="LineNr"> 924 </span> 74/jump-if-= $skip-chars-matching-whitespace-in-slice:body/disp8
|
||||||
<span id="L925" class="LineNr"> 925 </span> <span class="subxComment"># if (c == '\t') goto body</span>
|
<span id="L925" class="LineNr"> 925 </span> <span class="subxComment"># if (c == '\t') goto body</span>
|
||||||
<span id="L926" class="LineNr"> 926 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x09/imm32/tab <span class="subxComment"># compare ebx</span>
|
<span id="L926" class="LineNr"> 926 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x09/imm32/tab <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L927" class="LineNr"> 927 </span> 74/jump-if-equal $skip-chars-matching-whitespace-in-slice:body/disp8
|
<span id="L927" class="LineNr"> 927 </span> 74/jump-if-= $skip-chars-matching-whitespace-in-slice:body/disp8
|
||||||
<span id="L928" class="LineNr"> 928 </span> <span class="subxComment"># if (c != '\r') break</span>
|
<span id="L928" class="LineNr"> 928 </span> <span class="subxComment"># if (c != '\r') break</span>
|
||||||
<span id="L929" class="LineNr"> 929 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x0d/imm32/cr <span class="subxComment"># compare ebx</span>
|
<span id="L929" class="LineNr"> 929 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x0d/imm32/cr <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L930" class="LineNr"> 930 </span> 75/jump-if-not-equal $skip-chars-matching-whitespace-in-slice:end/disp8
|
<span id="L930" class="LineNr"> 930 </span> 75/jump-if-!= $skip-chars-matching-whitespace-in-slice:end/disp8
|
||||||
<span id="L931" class="LineNr"> 931 </span><span class="Constant">$skip-chars-matching-whitespace-in-slice:body</span>:
|
<span id="L931" class="LineNr"> 931 </span><span class="Constant">$skip-chars-matching-whitespace-in-slice:body</span>:
|
||||||
<span id="L932" class="LineNr"> 932 </span> <span class="subxComment"># ++curr</span>
|
<span id="L932" class="LineNr"> 932 </span> <span class="subxComment"># ++curr</span>
|
||||||
<span id="L933" class="LineNr"> 933 </span> 40/increment-eax
|
<span id="L933" class="LineNr"> 933 </span> 40/increment-eax
|
||||||
|
@ -1048,12 +1048,12 @@ if ('onhashchange' in window) {
|
||||||
<span id="L989" class="LineNr"> 989 </span><span class="Constant">$skip-chars-not-matching-in-slice:loop</span>:
|
<span id="L989" class="LineNr"> 989 </span><span class="Constant">$skip-chars-not-matching-in-slice:loop</span>:
|
||||||
<span id="L990" class="LineNr"> 990 </span> <span class="subxComment"># if (curr >= end) break</span>
|
<span id="L990" class="LineNr"> 990 </span> <span class="subxComment"># if (curr >= end) break</span>
|
||||||
<span id="L991" class="LineNr"> 991 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
<span id="L991" class="LineNr"> 991 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
||||||
<span id="L992" class="LineNr"> 992 </span> 73/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp8
|
<span id="L992" class="LineNr"> 992 </span> 73/jump-if-addr>= $skip-chars-not-matching-in-slice:end/disp8
|
||||||
<span id="L993" class="LineNr"> 993 </span> <span class="subxComment"># c = *curr</span>
|
<span id="L993" class="LineNr"> 993 </span> <span class="subxComment"># c = *curr</span>
|
||||||
<span id="L994" class="LineNr"> 994 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to BL</span>
|
<span id="L994" class="LineNr"> 994 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to BL</span>
|
||||||
<span id="L995" class="LineNr"> 995 </span> <span class="subxComment"># if (c == delimiter) break</span>
|
<span id="L995" class="LineNr"> 995 </span> <span class="subxComment"># if (c == delimiter) break</span>
|
||||||
<span id="L996" class="LineNr"> 996 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx and edx</span>
|
<span id="L996" class="LineNr"> 996 </span> 39/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ebx and edx</span>
|
||||||
<span id="L997" class="LineNr"> 997 </span> 74/jump-if-equal $skip-chars-not-matching-in-slice:end/disp8
|
<span id="L997" class="LineNr"> 997 </span> 74/jump-if-= $skip-chars-not-matching-in-slice:end/disp8
|
||||||
<span id="L998" class="LineNr"> 998 </span> <span class="subxComment"># ++curr</span>
|
<span id="L998" class="LineNr"> 998 </span> <span class="subxComment"># ++curr</span>
|
||||||
<span id="L999" class="LineNr"> 999 </span> 40/increment-eax
|
<span id="L999" class="LineNr"> 999 </span> 40/increment-eax
|
||||||
<span id="L1000" class="LineNr">1000 </span> eb/jump $skip-chars-not-matching-in-slice:<span class="Constant">loop</span>/disp8
|
<span id="L1000" class="LineNr">1000 </span> eb/jump $skip-chars-not-matching-in-slice:<span class="Constant">loop</span>/disp8
|
||||||
|
@ -1170,21 +1170,21 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1111" class="LineNr">1111 </span><span class="Constant">$skip-chars-not-matching-whitespace-in-slice:loop</span>:
|
<span id="L1111" class="LineNr">1111 </span><span class="Constant">$skip-chars-not-matching-whitespace-in-slice:loop</span>:
|
||||||
<span id="L1112" class="LineNr">1112 </span> <span class="subxComment"># if (curr >= end) break</span>
|
<span id="L1112" class="LineNr">1112 </span> <span class="subxComment"># if (curr >= end) break</span>
|
||||||
<span id="L1113" class="LineNr">1113 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
<span id="L1113" class="LineNr">1113 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
||||||
<span id="L1114" class="LineNr">1114 </span> 0f 83/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp32
|
<span id="L1114" class="LineNr">1114 </span> 0f 83/jump-if-addr>= $skip-chars-not-matching-in-slice:end/disp32
|
||||||
<span id="L1115" class="LineNr">1115 </span> <span class="subxComment"># c = *curr</span>
|
<span id="L1115" class="LineNr">1115 </span> <span class="subxComment"># c = *curr</span>
|
||||||
<span id="L1116" class="LineNr">1116 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to BL</span>
|
<span id="L1116" class="LineNr">1116 </span> 8a/copy-byte 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *eax to BL</span>
|
||||||
<span id="L1117" class="LineNr">1117 </span> <span class="subxComment"># if (c == ' ') break</span>
|
<span id="L1117" class="LineNr">1117 </span> <span class="subxComment"># if (c == ' ') break</span>
|
||||||
<span id="L1118" class="LineNr">1118 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x20/imm32/space <span class="subxComment"># compare ebx</span>
|
<span id="L1118" class="LineNr">1118 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x20/imm32/space <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L1119" class="LineNr">1119 </span> 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
<span id="L1119" class="LineNr">1119 </span> 74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
||||||
<span id="L1120" class="LineNr">1120 </span> <span class="subxComment"># if (c == '\n') break</span>
|
<span id="L1120" class="LineNr">1120 </span> <span class="subxComment"># if (c == '\n') break</span>
|
||||||
<span id="L1121" class="LineNr">1121 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x0a/imm32/newline <span class="subxComment"># compare ebx</span>
|
<span id="L1121" class="LineNr">1121 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x0a/imm32/newline <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L1122" class="LineNr">1122 </span> 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
<span id="L1122" class="LineNr">1122 </span> 74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
||||||
<span id="L1123" class="LineNr">1123 </span> <span class="subxComment"># if (c == '\t') break</span>
|
<span id="L1123" class="LineNr">1123 </span> <span class="subxComment"># if (c == '\t') break</span>
|
||||||
<span id="L1124" class="LineNr">1124 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x09/imm32/tab <span class="subxComment"># compare ebx</span>
|
<span id="L1124" class="LineNr">1124 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x09/imm32/tab <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L1125" class="LineNr">1125 </span> 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
<span id="L1125" class="LineNr">1125 </span> 74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
||||||
<span id="L1126" class="LineNr">1126 </span> <span class="subxComment"># if (c == '\r') break</span>
|
<span id="L1126" class="LineNr">1126 </span> <span class="subxComment"># if (c == '\r') break</span>
|
||||||
<span id="L1127" class="LineNr">1127 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x0d/imm32/cr <span class="subxComment"># compare ebx</span>
|
<span id="L1127" class="LineNr">1127 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x0d/imm32/cr <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L1128" class="LineNr">1128 </span> 74/jump-if-equal $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
<span id="L1128" class="LineNr">1128 </span> 74/jump-if-= $skip-chars-not-matching-whitespace-in-slice:end/disp8
|
||||||
<span id="L1129" class="LineNr">1129 </span> <span class="subxComment"># ++curr</span>
|
<span id="L1129" class="LineNr">1129 </span> <span class="subxComment"># ++curr</span>
|
||||||
<span id="L1130" class="LineNr">1130 </span> 40/increment-eax
|
<span id="L1130" class="LineNr">1130 </span> 40/increment-eax
|
||||||
<span id="L1131" class="LineNr">1131 </span> eb/jump $skip-chars-not-matching-whitespace-in-slice:<span class="Constant">loop</span>/disp8
|
<span id="L1131" class="LineNr">1131 </span> eb/jump $skip-chars-not-matching-whitespace-in-slice:<span class="Constant">loop</span>/disp8
|
||||||
|
@ -1488,17 +1488,17 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1429" class="LineNr">1429 </span><span class="Constant">$skip-string-in-slice:loop</span>:
|
<span id="L1429" class="LineNr">1429 </span><span class="Constant">$skip-string-in-slice:loop</span>:
|
||||||
<span id="L1430" class="LineNr">1430 </span> <span class="subxComment"># if (curr >= end) return curr</span>
|
<span id="L1430" class="LineNr">1430 </span> <span class="subxComment"># if (curr >= end) return curr</span>
|
||||||
<span id="L1431" class="LineNr">1431 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L1431" class="LineNr">1431 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L1432" class="LineNr">1432 </span> 73/jump-if-greater-unsigned-or-equal $skip-string-in-slice:return-curr/disp8
|
<span id="L1432" class="LineNr">1432 </span> 73/jump-if-addr>= $skip-string-in-slice:return-curr/disp8
|
||||||
<span id="L1433" class="LineNr">1433 </span> <span class="subxComment"># c = *curr</span>
|
<span id="L1433" class="LineNr">1433 </span> <span class="subxComment"># c = *curr</span>
|
||||||
<span id="L1434" class="LineNr">1434 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L1434" class="LineNr">1434 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
<span id="L1435" class="LineNr">1435 </span><span class="Constant">$skip-string-in-slice:dquote</span>:
|
<span id="L1435" class="LineNr">1435 </span><span class="Constant">$skip-string-in-slice:dquote</span>:
|
||||||
<span id="L1436" class="LineNr">1436 </span> <span class="subxComment"># if (c == '"') break</span>
|
<span id="L1436" class="LineNr">1436 </span> <span class="subxComment"># if (c == '"') break</span>
|
||||||
<span id="L1437" class="LineNr">1437 </span> 3d/compare-eax-and 0x22/imm32/double-quote
|
<span id="L1437" class="LineNr">1437 </span> 3d/compare-eax-and 0x22/imm32/double-quote
|
||||||
<span id="L1438" class="LineNr">1438 </span> 74/jump-if-equal $skip-string-in-slice:<span class="Constant">break</span>/disp8
|
<span id="L1438" class="LineNr">1438 </span> 74/jump-if-= $skip-string-in-slice:<span class="Constant">break</span>/disp8
|
||||||
<span id="L1439" class="LineNr">1439 </span><span class="Constant">$skip-string-in-slice:check-for-escape</span>:
|
<span id="L1439" class="LineNr">1439 </span><span class="Constant">$skip-string-in-slice:check-for-escape</span>:
|
||||||
<span id="L1440" class="LineNr">1440 </span> <span class="subxComment"># if (c == '\') escape next char</span>
|
<span id="L1440" class="LineNr">1440 </span> <span class="subxComment"># if (c == '\') escape next char</span>
|
||||||
<span id="L1441" class="LineNr">1441 </span> 3d/compare-eax-and 0x5c/imm32/backslash
|
<span id="L1441" class="LineNr">1441 </span> 3d/compare-eax-and 0x5c/imm32/backslash
|
||||||
<span id="L1442" class="LineNr">1442 </span> 75/jump-if-not-equal $skip-string-in-slice:continue/disp8
|
<span id="L1442" class="LineNr">1442 </span> 75/jump-if-!= $skip-string-in-slice:continue/disp8
|
||||||
<span id="L1443" class="LineNr">1443 </span><span class="Constant">$skip-string-in-slice:escape</span>:
|
<span id="L1443" class="LineNr">1443 </span><span class="Constant">$skip-string-in-slice:escape</span>:
|
||||||
<span id="L1444" class="LineNr">1444 </span> 41/increment-ecx
|
<span id="L1444" class="LineNr">1444 </span> 41/increment-ecx
|
||||||
<span id="L1445" class="LineNr">1445 </span><span class="Constant">$skip-string-in-slice:continue</span>:
|
<span id="L1445" class="LineNr">1445 </span><span class="Constant">$skip-string-in-slice:continue</span>:
|
||||||
|
@ -1860,13 +1860,13 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1801" class="LineNr">1801 </span><span class="Constant">$skip-until-close-paren-in-slice:loop</span>:
|
<span id="L1801" class="LineNr">1801 </span><span class="Constant">$skip-until-close-paren-in-slice:loop</span>:
|
||||||
<span id="L1802" class="LineNr">1802 </span> <span class="subxComment"># if (curr >= end) break</span>
|
<span id="L1802" class="LineNr">1802 </span> <span class="subxComment"># if (curr >= end) break</span>
|
||||||
<span id="L1803" class="LineNr">1803 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L1803" class="LineNr">1803 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L1804" class="LineNr">1804 </span> 73/jump-if-greater-unsigned-or-equal $skip-until-close-paren-in-slice:<span class="Constant">break</span>/disp8
|
<span id="L1804" class="LineNr">1804 </span> 73/jump-if-addr>= $skip-until-close-paren-in-slice:<span class="Constant">break</span>/disp8
|
||||||
<span id="L1805" class="LineNr">1805 </span> <span class="subxComment"># c = *curr</span>
|
<span id="L1805" class="LineNr">1805 </span> <span class="subxComment"># c = *curr</span>
|
||||||
<span id="L1806" class="LineNr">1806 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L1806" class="LineNr">1806 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
<span id="L1807" class="LineNr">1807 </span><span class="Constant">$skip-until-close-paren-in-slice:check-close</span>:
|
<span id="L1807" class="LineNr">1807 </span><span class="Constant">$skip-until-close-paren-in-slice:check-close</span>:
|
||||||
<span id="L1808" class="LineNr">1808 </span> <span class="subxComment"># if (c == ')') break</span>
|
<span id="L1808" class="LineNr">1808 </span> <span class="subxComment"># if (c == ')') break</span>
|
||||||
<span id="L1809" class="LineNr">1809 </span> 3d/compare-eax-and 0x29/imm32/close-paren
|
<span id="L1809" class="LineNr">1809 </span> 3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
<span id="L1810" class="LineNr">1810 </span> 74/jump-if-equal $skip-until-close-paren-in-slice:<span class="Constant">break</span>/disp8
|
<span id="L1810" class="LineNr">1810 </span> 74/jump-if-= $skip-until-close-paren-in-slice:<span class="Constant">break</span>/disp8
|
||||||
<span id="L1811" class="LineNr">1811 </span> <span class="subxComment"># ++curr</span>
|
<span id="L1811" class="LineNr">1811 </span> <span class="subxComment"># ++curr</span>
|
||||||
<span id="L1812" class="LineNr">1812 </span> 41/increment-ecx
|
<span id="L1812" class="LineNr">1812 </span> 41/increment-ecx
|
||||||
<span id="L1813" class="LineNr">1813 </span> eb/jump $skip-until-close-paren-in-slice:<span class="Constant">loop</span>/disp8
|
<span id="L1813" class="LineNr">1813 </span> eb/jump $skip-until-close-paren-in-slice:<span class="Constant">loop</span>/disp8
|
||||||
|
|
|
@ -112,7 +112,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># var eax : int = abs(n)</span>
|
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># var eax : int = abs(n)</span>
|
||||||
<span id="L52" class="LineNr"> 52 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
<span id="L52" class="LineNr"> 52 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
||||||
<span id="L53" class="LineNr"> 53 </span> 3d/compare-eax-with 0/imm32
|
<span id="L53" class="LineNr"> 53 </span> 3d/compare-eax-with 0/imm32
|
||||||
<span id="L54" class="LineNr"> 54 </span> 7d/jump-if-greater-or-equal $print-int32-decimal:read-loop/disp8
|
<span id="L54" class="LineNr"> 54 </span> 7d/jump-if->= $print-int32-decimal:read-loop/disp8
|
||||||
<span id="L55" class="LineNr"> 55 </span><span class="Constant">$print-int32-decimal:negative</span>:
|
<span id="L55" class="LineNr"> 55 </span><span class="Constant">$print-int32-decimal:negative</span>:
|
||||||
<span id="L56" class="LineNr"> 56 </span> f7 3/subop/negate 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># negate eax</span>
|
<span id="L56" class="LineNr"> 56 </span> f7 3/subop/negate 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># negate eax</span>
|
||||||
<span id="L57" class="LineNr"> 57 </span><span class="Constant">$print-int32-decimal:read-loop</span>:
|
<span id="L57" class="LineNr"> 57 </span><span class="Constant">$print-int32-decimal:read-loop</span>:
|
||||||
|
@ -125,11 +125,11 @@ if ('onhashchange' in window) {
|
||||||
<span id="L64" class="LineNr"> 64 </span> 52/push-edx
|
<span id="L64" class="LineNr"> 64 </span> 52/push-edx
|
||||||
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># if (eax == 0) break</span>
|
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># if (eax == 0) break</span>
|
||||||
<span id="L66" class="LineNr"> 66 </span> 3d/compare-eax-and 0/imm32
|
<span id="L66" class="LineNr"> 66 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L67" class="LineNr"> 67 </span> 7f/jump-if-greater $print-int32-decimal:read-loop/disp8
|
<span id="L67" class="LineNr"> 67 </span> 7f/jump-if-> $print-int32-decimal:read-loop/disp8
|
||||||
<span id="L68" class="LineNr"> 68 </span><span class="Constant">$print-int32-decimal:read-break</span>:
|
<span id="L68" class="LineNr"> 68 </span><span class="Constant">$print-int32-decimal:read-break</span>:
|
||||||
<span id="L69" class="LineNr"> 69 </span> <span class="subxComment"># if (n < 0) push('-')</span>
|
<span id="L69" class="LineNr"> 69 </span> <span class="subxComment"># if (n < 0) push('-')</span>
|
||||||
<span id="L70" class="LineNr"> 70 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 0/imm32 <span class="subxComment"># compare *(ebp+12)</span>
|
<span id="L70" class="LineNr"> 70 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xc/disp8 0/imm32 <span class="subxComment"># compare *(ebp+12)</span>
|
||||||
<span id="L71" class="LineNr"> 71 </span> 7d/jump-if-greater-or-equal $print-int32-decimal:<a href='057write.subx.html#L24'>write</a>/disp8
|
<span id="L71" class="LineNr"> 71 </span> 7d/jump-if->= $print-int32-decimal:<a href='057write.subx.html#L24'>write</a>/disp8
|
||||||
<span id="L72" class="LineNr"> 72 </span><span class="Constant">$print-int32-decimal:push-negative</span>:
|
<span id="L72" class="LineNr"> 72 </span><span class="Constant">$print-int32-decimal:push-negative</span>:
|
||||||
<span id="L73" class="LineNr"> 73 </span> 68/push 0x2d/imm32/-
|
<span id="L73" class="LineNr"> 73 </span> 68/push 0x2d/imm32/-
|
||||||
<span id="L74" class="LineNr"> 74 </span><span class="Constant">$print-int32-decimal:<a href='057write.subx.html#L24'>write</a></span>:
|
<span id="L74" class="LineNr"> 74 </span><span class="Constant">$print-int32-decimal:<a href='057write.subx.html#L24'>write</a></span>:
|
||||||
|
@ -147,10 +147,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L86" class="LineNr"> 86 </span> 58/pop-to-eax
|
<span id="L86" class="LineNr"> 86 </span> 58/pop-to-eax
|
||||||
<span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># if (eax == sentinel) break</span>
|
<span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># if (eax == sentinel) break</span>
|
||||||
<span id="L88" class="LineNr"> 88 </span> 3d/compare-eax-and 0/imm32/sentinel
|
<span id="L88" class="LineNr"> 88 </span> 3d/compare-eax-and 0/imm32/sentinel
|
||||||
<span id="L89" class="LineNr"> 89 </span> 74/jump-if-equal $print-int32-decimal:write-break/disp8
|
<span id="L89" class="LineNr"> 89 </span> 74/jump-if-= $print-int32-decimal:write-break/disp8
|
||||||
<span id="L90" class="LineNr"> 90 </span> <span class="subxComment"># if (curr >= max) abort</span>
|
<span id="L90" class="LineNr"> 90 </span> <span class="subxComment"># if (curr >= max) abort</span>
|
||||||
<span id="L91" class="LineNr"> 91 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
<span id="L91" class="LineNr"> 91 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with ebx</span>
|
||||||
<span id="L92" class="LineNr"> 92 </span> 73/jump-if-greater-or-equal-unsigned $print-int32-decimal:abort/disp8
|
<span id="L92" class="LineNr"> 92 </span> 73/jump-if-addr>= $print-int32-decimal:abort/disp8
|
||||||
<span id="L93" class="LineNr"> 93 </span><span class="Constant">$print-int32-decimal:write-char</span>:
|
<span id="L93" class="LineNr"> 93 </span><span class="Constant">$print-int32-decimal:write-char</span>:
|
||||||
<span id="L94" class="LineNr"> 94 </span> <span class="subxComment"># *curr = AL</span>
|
<span id="L94" class="LineNr"> 94 </span> <span class="subxComment"># *curr = AL</span>
|
||||||
<span id="L95" class="LineNr"> 95 </span> 88/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy AL to byte at *ecx</span>
|
<span id="L95" class="LineNr"> 95 </span> 88/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy AL to byte at *ecx</span>
|
||||||
|
@ -350,10 +350,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L314" class="LineNr">314 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to ecx</span>
|
<span id="L314" class="LineNr">314 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to ecx</span>
|
||||||
<span id="L315" class="LineNr">315 </span> <span class="subxComment"># return false if c < '0'</span>
|
<span id="L315" class="LineNr">315 </span> <span class="subxComment"># return false if c < '0'</span>
|
||||||
<span id="L316" class="LineNr">316 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x30/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L316" class="LineNr">316 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x30/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L317" class="LineNr">317 </span> 7c/jump-if-lesser $is-decimal-digit?:false/disp8
|
<span id="L317" class="LineNr">317 </span> 7c/jump-if-< $is-decimal-digit?:false/disp8
|
||||||
<span id="L318" class="LineNr">318 </span> <span class="subxComment"># return true if c <= '9'</span>
|
<span id="L318" class="LineNr">318 </span> <span class="subxComment"># return true if c <= '9'</span>
|
||||||
<span id="L319" class="LineNr">319 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x39/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L319" class="LineNr">319 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x39/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L320" class="LineNr">320 </span> 7e/jump-if-lesser-or-equal $is-decimal-digit?:true/disp8
|
<span id="L320" class="LineNr">320 </span> 7e/jump-if-<= $is-decimal-digit?:true/disp8
|
||||||
<span id="L321" class="LineNr">321 </span> <span class="subxComment"># otherwise return false</span>
|
<span id="L321" class="LineNr">321 </span> <span class="subxComment"># otherwise return false</span>
|
||||||
<span id="L322" class="LineNr">322 </span><span class="Constant">$is-decimal-digit?:false</span>:
|
<span id="L322" class="LineNr">322 </span><span class="Constant">$is-decimal-digit?:false</span>:
|
||||||
<span id="L323" class="LineNr">323 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L323" class="LineNr">323 </span> b8/copy-to-eax 0/imm32/false
|
||||||
|
|
|
@ -93,7 +93,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L34" class="LineNr"> 34 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
|
<span id="L34" class="LineNr"> 34 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
|
||||||
<span id="L35" class="LineNr"> 35 </span> <span class="subxS1Comment"># . if (eax < line->write) goto next check</span>
|
<span id="L35" class="LineNr"> 35 </span> <span class="subxS1Comment"># . if (eax < line->write) goto next check</span>
|
||||||
<span id="L36" class="LineNr"> 36 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with *esi</span>
|
<span id="L36" class="LineNr"> 36 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with *esi</span>
|
||||||
<span id="L37" class="LineNr"> 37 </span> 7c/jump-if-lesser $next-word:check-for-comment/disp8
|
<span id="L37" class="LineNr"> 37 </span> 7c/jump-if-< $next-word:check-for-comment/disp8
|
||||||
<span id="L38" class="LineNr"> 38 </span> <span class="subxS1Comment"># . return out</span>
|
<span id="L38" class="LineNr"> 38 </span> <span class="subxS1Comment"># . return out</span>
|
||||||
<span id="L39" class="LineNr"> 39 </span> c7 0/subop/copy 0/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># copy to *edi</span>
|
<span id="L39" class="LineNr"> 39 </span> c7 0/subop/copy 0/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># copy to *edi</span>
|
||||||
<span id="L40" class="LineNr"> 40 </span> c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># copy to *(edi+4)</span>
|
<span id="L40" class="LineNr"> 40 </span> c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># copy to *(edi+4)</span>
|
||||||
|
@ -109,7 +109,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L50" class="LineNr"> 50 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
<span id="L50" class="LineNr"> 50 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
||||||
<span id="L51" class="LineNr"> 51 </span> <span class="subxS1Comment"># . compare</span>
|
<span id="L51" class="LineNr"> 51 </span> <span class="subxS1Comment"># . compare</span>
|
||||||
<span id="L52" class="LineNr"> 52 </span> 3d/compare-eax-and 0x23/imm32/pound
|
<span id="L52" class="LineNr"> 52 </span> 3d/compare-eax-and 0x23/imm32/pound
|
||||||
<span id="L53" class="LineNr"> 53 </span> 75/jump-if-not-equal $next-word:regular-word/disp8
|
<span id="L53" class="LineNr"> 53 </span> 75/jump-if-!= $next-word:regular-word/disp8
|
||||||
<span id="L54" class="LineNr"> 54 </span><span class="Constant">$next-word:comment</span>:
|
<span id="L54" class="LineNr"> 54 </span><span class="Constant">$next-word:comment</span>:
|
||||||
<span id="L55" class="LineNr"> 55 </span> <span class="subxS1Comment"># . out->end = &line->data[line->write]</span>
|
<span id="L55" class="LineNr"> 55 </span> <span class="subxS1Comment"># . out->end = &line->data[line->write]</span>
|
||||||
<span id="L56" class="LineNr"> 56 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to eax</span>
|
<span id="L56" class="LineNr"> 56 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to eax</span>
|
||||||
|
|
|
@ -121,7 +121,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L62" class="LineNr"> 62 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L62" class="LineNr"> 62 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L63" class="LineNr"> 63 </span> <span class="subxS1Comment"># . if (eax != false) return false</span>
|
<span id="L63" class="LineNr"> 63 </span> <span class="subxS1Comment"># . if (eax != false) return false</span>
|
||||||
<span id="L64" class="LineNr"> 64 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L64" class="LineNr"> 64 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L65" class="LineNr"> 65 </span> 75/jump-if-not-equal $has-metadata?:false/disp8
|
<span id="L65" class="LineNr"> 65 </span> 75/jump-if-!= $has-metadata?:false/disp8
|
||||||
<span id="L66" class="LineNr"> 66 </span> <span class="subxComment"># if (slice-equal?(twig, s)) return true</span>
|
<span id="L66" class="LineNr"> 66 </span> <span class="subxComment"># if (slice-equal?(twig, s)) return true</span>
|
||||||
<span id="L67" class="LineNr"> 67 </span> <span class="subxS1Comment"># . eax = slice-equal?(twig, s)</span>
|
<span id="L67" class="LineNr"> 67 </span> <span class="subxS1Comment"># . eax = slice-equal?(twig, s)</span>
|
||||||
<span id="L68" class="LineNr"> 68 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L68" class="LineNr"> 68 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -134,7 +134,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L75" class="LineNr"> 75 </span> <span class="subxS1Comment"># . if (eax != false) return true</span>
|
<span id="L75" class="LineNr"> 75 </span> <span class="subxS1Comment"># . if (eax != false) return true</span>
|
||||||
<span id="L76" class="LineNr"> 76 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L76" class="LineNr"> 76 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># eax already contains true</span>
|
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># eax already contains true</span>
|
||||||
<span id="L78" class="LineNr"> 78 </span> 75/jump-if-not-equal $has-metadata?:end/disp8
|
<span id="L78" class="LineNr"> 78 </span> 75/jump-if-!= $has-metadata?:end/disp8
|
||||||
<span id="L79" class="LineNr"> 79 </span> eb/jump $has-metadata?:<span class="Constant">loop</span>/disp8
|
<span id="L79" class="LineNr"> 79 </span> eb/jump $has-metadata?:<span class="Constant">loop</span>/disp8
|
||||||
<span id="L80" class="LineNr"> 80 </span><span class="Constant">$has-metadata?:false</span>:
|
<span id="L80" class="LineNr"> 80 </span><span class="Constant">$has-metadata?:false</span>:
|
||||||
<span id="L81" class="LineNr"> 81 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L81" class="LineNr"> 81 </span> b8/copy-to-eax 0/imm32/false
|
||||||
|
@ -348,29 +348,29 @@ if ('onhashchange' in window) {
|
||||||
<span id="L289" class="LineNr">289 </span><span class="Constant">$is-valid-name?:check0</span>:
|
<span id="L289" class="LineNr">289 </span><span class="Constant">$is-valid-name?:check0</span>:
|
||||||
<span id="L290" class="LineNr">290 </span> <span class="subxComment"># if (start >= in->end) return false</span>
|
<span id="L290" class="LineNr">290 </span> <span class="subxComment"># if (start >= in->end) return false</span>
|
||||||
<span id="L291" class="LineNr">291 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
<span id="L291" class="LineNr">291 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
||||||
<span id="L292" class="LineNr">292 </span> 73/jump-if-greater-or-equal-unsigned $is-valid-name?:false/disp8
|
<span id="L292" class="LineNr">292 </span> 73/jump-if-addr>= $is-valid-name?:false/disp8
|
||||||
<span id="L293" class="LineNr">293 </span><span class="Constant">$is-valid-name?:check1</span>:
|
<span id="L293" class="LineNr">293 </span><span class="Constant">$is-valid-name?:check1</span>:
|
||||||
<span id="L294" class="LineNr">294 </span> <span class="subxComment"># var len/eax : int = in->end - start</span>
|
<span id="L294" class="LineNr">294 </span> <span class="subxComment"># var len/eax : int = in->end - start</span>
|
||||||
<span id="L295" class="LineNr">295 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
|
<span id="L295" class="LineNr">295 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
|
||||||
<span id="L296" class="LineNr">296 </span> 29/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># subtract ecx from eax</span>
|
<span id="L296" class="LineNr">296 </span> 29/subtract 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># subtract ecx from eax</span>
|
||||||
<span id="L297" class="LineNr">297 </span> <span class="subxComment"># if (eax == 2) return false</span>
|
<span id="L297" class="LineNr">297 </span> <span class="subxComment"># if (eax == 2) return false</span>
|
||||||
<span id="L298" class="LineNr">298 </span> 3d/compare-eax-and 2/imm32
|
<span id="L298" class="LineNr">298 </span> 3d/compare-eax-and 2/imm32
|
||||||
<span id="L299" class="LineNr">299 </span> 74/jump-if-equal $is-valid-name?:false/disp8
|
<span id="L299" class="LineNr">299 </span> 74/jump-if-= $is-valid-name?:false/disp8
|
||||||
<span id="L300" class="LineNr">300 </span><span class="Constant">$is-valid-name?:check2</span>:
|
<span id="L300" class="LineNr">300 </span><span class="Constant">$is-valid-name?:check2</span>:
|
||||||
<span id="L301" class="LineNr">301 </span> <span class="subxComment"># var c/eax : (addr byte) = *start</span>
|
<span id="L301" class="LineNr">301 </span> <span class="subxComment"># var c/eax : (addr byte) = *start</span>
|
||||||
<span id="L302" class="LineNr">302 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L302" class="LineNr">302 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
<span id="L303" class="LineNr">303 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L303" class="LineNr">303 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
<span id="L304" class="LineNr">304 </span> <span class="subxComment"># if (c == "-") return false</span>
|
<span id="L304" class="LineNr">304 </span> <span class="subxComment"># if (c == "-") return false</span>
|
||||||
<span id="L305" class="LineNr">305 </span> 3d/compare-eax-and 2d/imm32/-
|
<span id="L305" class="LineNr">305 </span> 3d/compare-eax-and 2d/imm32/-
|
||||||
<span id="L306" class="LineNr">306 </span> 74/jump-if-equal $is-valid-name?:false/disp8
|
<span id="L306" class="LineNr">306 </span> 74/jump-if-= $is-valid-name?:false/disp8
|
||||||
<span id="L307" class="LineNr">307 </span><span class="Constant">$is-valid-name?:check3a</span>:
|
<span id="L307" class="LineNr">307 </span><span class="Constant">$is-valid-name?:check3a</span>:
|
||||||
<span id="L308" class="LineNr">308 </span> <span class="subxComment"># if (c < "0") return true</span>
|
<span id="L308" class="LineNr">308 </span> <span class="subxComment"># if (c < "0") return true</span>
|
||||||
<span id="L309" class="LineNr">309 </span> 3d/compare-eax-with 30/imm32/0
|
<span id="L309" class="LineNr">309 </span> 3d/compare-eax-with 30/imm32/0
|
||||||
<span id="L310" class="LineNr">310 </span> 7c/jump-if-lesser $is-valid-name?:true/disp8
|
<span id="L310" class="LineNr">310 </span> 7c/jump-if-< $is-valid-name?:true/disp8
|
||||||
<span id="L311" class="LineNr">311 </span><span class="Constant">$is-valid-name?:check3b</span>:
|
<span id="L311" class="LineNr">311 </span><span class="Constant">$is-valid-name?:check3b</span>:
|
||||||
<span id="L312" class="LineNr">312 </span> <span class="subxComment"># if (c > "9") return true</span>
|
<span id="L312" class="LineNr">312 </span> <span class="subxComment"># if (c > "9") return true</span>
|
||||||
<span id="L313" class="LineNr">313 </span> 3d/compare-eax-with 39/imm32/9
|
<span id="L313" class="LineNr">313 </span> 3d/compare-eax-with 39/imm32/9
|
||||||
<span id="L314" class="LineNr">314 </span> 7f/jump-if-greater $is-valid-name?:true/disp8
|
<span id="L314" class="LineNr">314 </span> 7f/jump-if-> $is-valid-name?:true/disp8
|
||||||
<span id="L315" class="LineNr">315 </span><span class="Constant">$is-valid-name?:false</span>:
|
<span id="L315" class="LineNr">315 </span><span class="Constant">$is-valid-name?:false</span>:
|
||||||
<span id="L316" class="LineNr">316 </span> <span class="subxComment"># return false</span>
|
<span id="L316" class="LineNr">316 </span> <span class="subxComment"># return false</span>
|
||||||
<span id="L317" class="LineNr">317 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L317" class="LineNr">317 </span> b8/copy-to-eax 0/imm32/false
|
||||||
|
@ -608,7 +608,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L549" class="LineNr">549 </span> <span class="subxS1Comment"># . return (eax == ':')</span>
|
<span id="L549" class="LineNr">549 </span> <span class="subxS1Comment"># . return (eax == ':')</span>
|
||||||
<span id="L550" class="LineNr">550 </span> 3d/compare-eax-and 0x3a/imm32/colon
|
<span id="L550" class="LineNr">550 </span> 3d/compare-eax-and 0x3a/imm32/colon
|
||||||
<span id="L551" class="LineNr">551 </span> b8/copy-to-eax 1/imm32/true
|
<span id="L551" class="LineNr">551 </span> b8/copy-to-eax 1/imm32/true
|
||||||
<span id="L552" class="LineNr">552 </span> 74/jump-if-equal $is-label?:end/disp8
|
<span id="L552" class="LineNr">552 </span> 74/jump-if-= $is-label?:end/disp8
|
||||||
<span id="L553" class="LineNr">553 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L553" class="LineNr">553 </span> b8/copy-to-eax 0/imm32/false
|
||||||
<span id="L554" class="LineNr">554 </span><span class="Constant">$is-label?:end</span>:
|
<span id="L554" class="LineNr">554 </span><span class="Constant">$is-label?:end</span>:
|
||||||
<span id="L555" class="LineNr">555 </span> <span class="subxS1Comment"># . restore registers</span>
|
<span id="L555" class="LineNr">555 </span> <span class="subxS1Comment"># . restore registers</span>
|
||||||
|
|
|
@ -84,7 +84,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L25" class="LineNr"> 25 </span><span class="Constant">$emit-hex:loop</span>:
|
<span id="L25" class="LineNr"> 25 </span><span class="Constant">$emit-hex:loop</span>:
|
||||||
<span id="L26" class="LineNr"> 26 </span> <span class="subxComment"># if (curr >= width) break</span>
|
<span id="L26" class="LineNr"> 26 </span> <span class="subxComment"># if (curr >= width) break</span>
|
||||||
<span id="L27" class="LineNr"> 27 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L27" class="LineNr"> 27 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L28" class="LineNr"> 28 </span> 7d/jump-if-greater-or-equal $emit-hex:end/disp8
|
<span id="L28" class="LineNr"> 28 </span> 7d/jump-if->= $emit-hex:end/disp8
|
||||||
<span id="L29" class="LineNr"> 29 </span> <span class="subxComment"># print-byte-buffered(out, ebx) # only BL used</span>
|
<span id="L29" class="LineNr"> 29 </span> <span class="subxComment"># print-byte-buffered(out, ebx) # only BL used</span>
|
||||||
<span id="L30" class="LineNr"> 30 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L30" class="LineNr"> 30 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L31" class="LineNr"> 31 </span> 53/push-ebx
|
<span id="L31" class="LineNr"> 31 </span> 53/push-ebx
|
||||||
|
|
|
@ -102,7 +102,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L41" class="LineNr"> 41 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L41" class="LineNr"> 41 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L42" class="LineNr"> 42 </span> <span class="subxS1Comment"># . if (eax != false)</span>
|
<span id="L42" class="LineNr"> 42 </span> <span class="subxS1Comment"># . if (eax != false)</span>
|
||||||
<span id="L43" class="LineNr"> 43 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L43" class="LineNr"> 43 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L44" class="LineNr"> 44 </span> 74/jump-if-equal $emit:hex-int/disp8
|
<span id="L44" class="LineNr"> 44 </span> 74/jump-if-= $emit:hex-int/disp8
|
||||||
<span id="L45" class="LineNr"> 45 </span><span class="Constant">$emit:name</span>:
|
<span id="L45" class="LineNr"> 45 </span><span class="Constant">$emit:name</span>:
|
||||||
<span id="L46" class="LineNr"> 46 </span> <span class="subxS1Comment"># . write-slice-buffered(out, word)</span>
|
<span id="L46" class="LineNr"> 46 </span> <span class="subxS1Comment"># . write-slice-buffered(out, word)</span>
|
||||||
<span id="L47" class="LineNr"> 47 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L47" class="LineNr"> 47 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
|
|
@ -91,7 +91,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L32" class="LineNr">32 </span><span class="Constant">$zero-out:loop</span>:
|
<span id="L32" class="LineNr">32 </span><span class="Constant">$zero-out:loop</span>:
|
||||||
<span id="L33" class="LineNr">33 </span> <span class="subxComment"># if (i >= len) break</span>
|
<span id="L33" class="LineNr">33 </span> <span class="subxComment"># if (i >= len) break</span>
|
||||||
<span id="L34" class="LineNr">34 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L34" class="LineNr">34 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L35" class="LineNr">35 </span> 7d/jump-if-greater-or-equal $zero-out:end/disp8
|
<span id="L35" class="LineNr">35 </span> 7d/jump-if->= $zero-out:end/disp8
|
||||||
<span id="L36" class="LineNr">36 </span> <span class="subxComment"># *curr = 0</span>
|
<span id="L36" class="LineNr">36 </span> <span class="subxComment"># *curr = 0</span>
|
||||||
<span id="L37" class="LineNr">37 </span> c6 0/subop/copy 0/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm8 <span class="subxComment"># copy byte to *esi</span>
|
<span id="L37" class="LineNr">37 </span> c6 0/subop/copy 0/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm8 <span class="subxComment"># copy byte to *esi</span>
|
||||||
<span id="L38" class="LineNr">38 </span> <span class="subxComment"># ++curr</span>
|
<span id="L38" class="LineNr">38 </span> <span class="subxComment"># ++curr</span>
|
||||||
|
|
|
@ -112,7 +112,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L51" class="LineNr"> 51 </span><span class="Constant">$get:search-loop</span>:
|
<span id="L51" class="LineNr"> 51 </span><span class="Constant">$get:search-loop</span>:
|
||||||
<span id="L52" class="LineNr"> 52 </span> <span class="subxComment"># if (curr >= max) abort</span>
|
<span id="L52" class="LineNr"> 52 </span> <span class="subxComment"># if (curr >= max) abort</span>
|
||||||
<span id="L53" class="LineNr"> 53 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L53" class="LineNr"> 53 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L54" class="LineNr"> 54 </span> 73/jump-if-greater-or-equal-unsigned $get:abort/disp8
|
<span id="L54" class="LineNr"> 54 </span> 73/jump-if-addr>= $get:abort/disp8
|
||||||
<span id="L55" class="LineNr"> 55 </span> <span class="subxComment"># if (string-equal?(key, *curr)) return curr+4</span>
|
<span id="L55" class="LineNr"> 55 </span> <span class="subxComment"># if (string-equal?(key, *curr)) return curr+4</span>
|
||||||
<span id="L56" class="LineNr"> 56 </span> <span class="subxS1Comment"># . eax = string-equal?(key, *curr)</span>
|
<span id="L56" class="LineNr"> 56 </span> <span class="subxS1Comment"># . eax = string-equal?(key, *curr)</span>
|
||||||
<span id="L57" class="LineNr"> 57 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L57" class="LineNr"> 57 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -124,7 +124,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L63" class="LineNr"> 63 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L63" class="LineNr"> 63 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L64" class="LineNr"> 64 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
<span id="L64" class="LineNr"> 64 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
||||||
<span id="L65" class="LineNr"> 65 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L65" class="LineNr"> 65 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L66" class="LineNr"> 66 </span> 74/jump-if-equal $get:mismatch/disp8
|
<span id="L66" class="LineNr"> 66 </span> 74/jump-if-= $get:mismatch/disp8
|
||||||
<span id="L67" class="LineNr"> 67 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
<span id="L67" class="LineNr"> 67 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
||||||
<span id="L68" class="LineNr"> 68 </span> eb/jump $get:end/disp8
|
<span id="L68" class="LineNr"> 68 </span> eb/jump $get:end/disp8
|
||||||
<span id="L69" class="LineNr"> 69 </span><span class="Constant">$get:mismatch</span>:
|
<span id="L69" class="LineNr"> 69 </span><span class="Constant">$get:mismatch</span>:
|
||||||
|
@ -286,7 +286,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L225" class="LineNr"> 225 </span><span class="Constant">$get-slice:search-loop</span>:
|
<span id="L225" class="LineNr"> 225 </span><span class="Constant">$get-slice:search-loop</span>:
|
||||||
<span id="L226" class="LineNr"> 226 </span> <span class="subxComment"># if (curr >= max) abort</span>
|
<span id="L226" class="LineNr"> 226 </span> <span class="subxComment"># if (curr >= max) abort</span>
|
||||||
<span id="L227" class="LineNr"> 227 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L227" class="LineNr"> 227 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L228" class="LineNr"> 228 </span> 73/jump-if-greater-or-equal-unsigned $get-slice:abort/disp8
|
<span id="L228" class="LineNr"> 228 </span> 73/jump-if-addr>= $get-slice:abort/disp8
|
||||||
<span id="L229" class="LineNr"> 229 </span> <span class="subxComment"># if (slice-equal?(key, *curr)) return curr+4</span>
|
<span id="L229" class="LineNr"> 229 </span> <span class="subxComment"># if (slice-equal?(key, *curr)) return curr+4</span>
|
||||||
<span id="L230" class="LineNr"> 230 </span> <span class="subxS1Comment"># . eax = slice-equal?(key, *curr)</span>
|
<span id="L230" class="LineNr"> 230 </span> <span class="subxS1Comment"># . eax = slice-equal?(key, *curr)</span>
|
||||||
<span id="L231" class="LineNr"> 231 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L231" class="LineNr"> 231 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -298,7 +298,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L237" class="LineNr"> 237 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L237" class="LineNr"> 237 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L238" class="LineNr"> 238 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
<span id="L238" class="LineNr"> 238 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
||||||
<span id="L239" class="LineNr"> 239 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L239" class="LineNr"> 239 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L240" class="LineNr"> 240 </span> 74/jump-if-equal $get-slice:mismatch/disp8
|
<span id="L240" class="LineNr"> 240 </span> 74/jump-if-= $get-slice:mismatch/disp8
|
||||||
<span id="L241" class="LineNr"> 241 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
<span id="L241" class="LineNr"> 241 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
||||||
<span id="L242" class="LineNr"> 242 </span> eb/jump $get-slice:end/disp8
|
<span id="L242" class="LineNr"> 242 </span> eb/jump $get-slice:end/disp8
|
||||||
<span id="L243" class="LineNr"> 243 </span><span class="Constant">$get-slice:mismatch</span>:
|
<span id="L243" class="LineNr"> 243 </span><span class="Constant">$get-slice:mismatch</span>:
|
||||||
|
@ -494,7 +494,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L433" class="LineNr"> 433 </span><span class="Constant">$get-or-insert:search-loop</span>:
|
<span id="L433" class="LineNr"> 433 </span><span class="Constant">$get-or-insert:search-loop</span>:
|
||||||
<span id="L434" class="LineNr"> 434 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L434" class="LineNr"> 434 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L435" class="LineNr"> 435 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L435" class="LineNr"> 435 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L436" class="LineNr"> 436 </span> 73/jump-if-greater-or-equal-unsigned $get-or-insert:not-found/disp8
|
<span id="L436" class="LineNr"> 436 </span> 73/jump-if-addr>= $get-or-insert:not-found/disp8
|
||||||
<span id="L437" class="LineNr"> 437 </span> <span class="subxComment"># if (string-equal?(key, *curr)) return curr+4</span>
|
<span id="L437" class="LineNr"> 437 </span> <span class="subxComment"># if (string-equal?(key, *curr)) return curr+4</span>
|
||||||
<span id="L438" class="LineNr"> 438 </span> <span class="subxS1Comment"># . eax = string-equal?(key, *curr)</span>
|
<span id="L438" class="LineNr"> 438 </span> <span class="subxS1Comment"># . eax = string-equal?(key, *curr)</span>
|
||||||
<span id="L439" class="LineNr"> 439 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L439" class="LineNr"> 439 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -506,7 +506,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L445" class="LineNr"> 445 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L445" class="LineNr"> 445 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L446" class="LineNr"> 446 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
<span id="L446" class="LineNr"> 446 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
||||||
<span id="L447" class="LineNr"> 447 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L447" class="LineNr"> 447 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L448" class="LineNr"> 448 </span> 74/jump-if-equal $get-or-insert:mismatch/disp8
|
<span id="L448" class="LineNr"> 448 </span> 74/jump-if-= $get-or-insert:mismatch/disp8
|
||||||
<span id="L449" class="LineNr"> 449 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
<span id="L449" class="LineNr"> 449 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
||||||
<span id="L450" class="LineNr"> 450 </span> eb/jump $get-or-insert:end/disp8
|
<span id="L450" class="LineNr"> 450 </span> eb/jump $get-or-insert:end/disp8
|
||||||
<span id="L451" class="LineNr"> 451 </span><span class="Constant">$get-or-insert:mismatch</span>:
|
<span id="L451" class="LineNr"> 451 </span><span class="Constant">$get-or-insert:mismatch</span>:
|
||||||
|
@ -520,7 +520,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L459" class="LineNr"> 459 </span> <span class="subxComment"># if (table->write >= table->length) abort</span>
|
<span id="L459" class="LineNr"> 459 </span> <span class="subxComment"># if (table->write >= table->length) abort</span>
|
||||||
<span id="L460" class="LineNr"> 460 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span>
|
<span id="L460" class="LineNr"> 460 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span>
|
||||||
<span id="L461" class="LineNr"> 461 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+8)</span>
|
<span id="L461" class="LineNr"> 461 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+8)</span>
|
||||||
<span id="L462" class="LineNr"> 462 </span> 73/jump-if-greater-or-equal-unsigned $get-or-insert:abort/disp8
|
<span id="L462" class="LineNr"> 462 </span> 73/jump-if-addr>= $get-or-insert:abort/disp8
|
||||||
<span id="L463" class="LineNr"> 463 </span> <span class="subxComment"># zero-out(max, row-size)</span>
|
<span id="L463" class="LineNr"> 463 </span> <span class="subxComment"># zero-out(max, row-size)</span>
|
||||||
<span id="L464" class="LineNr"> 464 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L464" class="LineNr"> 464 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L465" class="LineNr"> 465 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x10/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+16)</span>
|
<span id="L465" class="LineNr"> 465 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x10/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+16)</span>
|
||||||
|
@ -745,7 +745,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L684" class="LineNr"> 684 </span><span class="Constant">$leaky-get-or-insert-slice:search-loop</span>:
|
<span id="L684" class="LineNr"> 684 </span><span class="Constant">$leaky-get-or-insert-slice:search-loop</span>:
|
||||||
<span id="L685" class="LineNr"> 685 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L685" class="LineNr"> 685 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L686" class="LineNr"> 686 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L686" class="LineNr"> 686 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L687" class="LineNr"> 687 </span> 73/jump-if-greater-or-equal-unsigned $leaky-get-or-insert-slice:not-found/disp8
|
<span id="L687" class="LineNr"> 687 </span> 73/jump-if-addr>= $leaky-get-or-insert-slice:not-found/disp8
|
||||||
<span id="L688" class="LineNr"> 688 </span> <span class="subxComment"># if (slice-equal?(key, *curr)) return curr+4</span>
|
<span id="L688" class="LineNr"> 688 </span> <span class="subxComment"># if (slice-equal?(key, *curr)) return curr+4</span>
|
||||||
<span id="L689" class="LineNr"> 689 </span> <span class="subxS1Comment"># . eax = slice-equal?(key, *curr)</span>
|
<span id="L689" class="LineNr"> 689 </span> <span class="subxS1Comment"># . eax = slice-equal?(key, *curr)</span>
|
||||||
<span id="L690" class="LineNr"> 690 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L690" class="LineNr"> 690 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -757,7 +757,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L696" class="LineNr"> 696 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L696" class="LineNr"> 696 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L697" class="LineNr"> 697 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
<span id="L697" class="LineNr"> 697 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
||||||
<span id="L698" class="LineNr"> 698 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L698" class="LineNr"> 698 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L699" class="LineNr"> 699 </span> 74/jump-if-equal $leaky-get-or-insert-slice:mismatch/disp8
|
<span id="L699" class="LineNr"> 699 </span> 74/jump-if-= $leaky-get-or-insert-slice:mismatch/disp8
|
||||||
<span id="L700" class="LineNr"> 700 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
<span id="L700" class="LineNr"> 700 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
||||||
<span id="L701" class="LineNr"> 701 </span> eb/jump $leaky-get-or-insert-slice:end/disp8
|
<span id="L701" class="LineNr"> 701 </span> eb/jump $leaky-get-or-insert-slice:end/disp8
|
||||||
<span id="L702" class="LineNr"> 702 </span><span class="Constant">$leaky-get-or-insert-slice:mismatch</span>:
|
<span id="L702" class="LineNr"> 702 </span><span class="Constant">$leaky-get-or-insert-slice:mismatch</span>:
|
||||||
|
@ -771,7 +771,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L710" class="LineNr"> 710 </span> <span class="subxComment"># if (table->write >= table->length) abort</span>
|
<span id="L710" class="LineNr"> 710 </span> <span class="subxComment"># if (table->write >= table->length) abort</span>
|
||||||
<span id="L711" class="LineNr"> 711 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span>
|
<span id="L711" class="LineNr"> 711 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span>
|
||||||
<span id="L712" class="LineNr"> 712 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+8)</span>
|
<span id="L712" class="LineNr"> 712 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+8)</span>
|
||||||
<span id="L713" class="LineNr"> 713 </span> 7d/jump-if-greater-or-equal $leaky-get-or-insert-slice:abort/disp8
|
<span id="L713" class="LineNr"> 713 </span> 7d/jump-if->= $leaky-get-or-insert-slice:abort/disp8
|
||||||
<span id="L714" class="LineNr"> 714 </span> <span class="subxComment"># zero-out(max, row-size)</span>
|
<span id="L714" class="LineNr"> 714 </span> <span class="subxComment"># zero-out(max, row-size)</span>
|
||||||
<span id="L715" class="LineNr"> 715 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L715" class="LineNr"> 715 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L716" class="LineNr"> 716 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x10/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+16)</span>
|
<span id="L716" class="LineNr"> 716 </span> ff 6/subop/push 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x10/disp8 <span class="Normal"> . </span> <span class="subxComment"># push *(ebp+16)</span>
|
||||||
|
@ -1015,7 +1015,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L954" class="LineNr"> 954 </span><span class="Constant">$get-or-stop:search-loop</span>:
|
<span id="L954" class="LineNr"> 954 </span><span class="Constant">$get-or-stop:search-loop</span>:
|
||||||
<span id="L955" class="LineNr"> 955 </span> <span class="subxComment"># if (curr >= max) stop(ed)</span>
|
<span id="L955" class="LineNr"> 955 </span> <span class="subxComment"># if (curr >= max) stop(ed)</span>
|
||||||
<span id="L956" class="LineNr"> 956 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L956" class="LineNr"> 956 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L957" class="LineNr"> 957 </span> 73/jump-if-greater-or-equal-unsigned $get-or-stop:<a href='059stop.subx.html#L92'>stop</a>/disp8
|
<span id="L957" class="LineNr"> 957 </span> 73/jump-if-addr>= $get-or-stop:<a href='059stop.subx.html#L92'>stop</a>/disp8
|
||||||
<span id="L958" class="LineNr"> 958 </span> <span class="subxComment"># if (string-equal?(key, *curr)) return curr+4</span>
|
<span id="L958" class="LineNr"> 958 </span> <span class="subxComment"># if (string-equal?(key, *curr)) return curr+4</span>
|
||||||
<span id="L959" class="LineNr"> 959 </span> <span class="subxS1Comment"># . eax = string-equal?(key, *curr)</span>
|
<span id="L959" class="LineNr"> 959 </span> <span class="subxS1Comment"># . eax = string-equal?(key, *curr)</span>
|
||||||
<span id="L960" class="LineNr"> 960 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L960" class="LineNr"> 960 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -1027,7 +1027,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L966" class="LineNr"> 966 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L966" class="LineNr"> 966 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L967" class="LineNr"> 967 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
<span id="L967" class="LineNr"> 967 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
||||||
<span id="L968" class="LineNr"> 968 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L968" class="LineNr"> 968 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L969" class="LineNr"> 969 </span> 74/jump-if-equal $get-or-stop:mismatch/disp8
|
<span id="L969" class="LineNr"> 969 </span> 74/jump-if-= $get-or-stop:mismatch/disp8
|
||||||
<span id="L970" class="LineNr"> 970 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
<span id="L970" class="LineNr"> 970 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
||||||
<span id="L971" class="LineNr"> 971 </span> eb/jump $get-or-stop:end/disp8
|
<span id="L971" class="LineNr"> 971 </span> eb/jump $get-or-stop:end/disp8
|
||||||
<span id="L972" class="LineNr"> 972 </span><span class="Constant">$get-or-stop:mismatch</span>:
|
<span id="L972" class="LineNr"> 972 </span><span class="Constant">$get-or-stop:mismatch</span>:
|
||||||
|
@ -1231,7 +1231,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1170" class="LineNr">1170 </span><span class="Constant">$get-slice-or-stop:search-loop</span>:
|
<span id="L1170" class="LineNr">1170 </span><span class="Constant">$get-slice-or-stop:search-loop</span>:
|
||||||
<span id="L1171" class="LineNr">1171 </span> <span class="subxComment"># if (curr >= max) stop(ed)</span>
|
<span id="L1171" class="LineNr">1171 </span> <span class="subxComment"># if (curr >= max) stop(ed)</span>
|
||||||
<span id="L1172" class="LineNr">1172 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L1172" class="LineNr">1172 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L1173" class="LineNr">1173 </span> 73/jump-if-greater-or-equal-unsigned $get-slice-or-stop:<a href='059stop.subx.html#L92'>stop</a>/disp8
|
<span id="L1173" class="LineNr">1173 </span> 73/jump-if-addr>= $get-slice-or-stop:<a href='059stop.subx.html#L92'>stop</a>/disp8
|
||||||
<span id="L1174" class="LineNr">1174 </span> <span class="subxComment"># if (slice-equal?(key, *curr)) return curr+4</span>
|
<span id="L1174" class="LineNr">1174 </span> <span class="subxComment"># if (slice-equal?(key, *curr)) return curr+4</span>
|
||||||
<span id="L1175" class="LineNr">1175 </span> <span class="subxS1Comment"># . eax = slice-equal?(key, *curr)</span>
|
<span id="L1175" class="LineNr">1175 </span> <span class="subxS1Comment"># . eax = slice-equal?(key, *curr)</span>
|
||||||
<span id="L1176" class="LineNr">1176 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L1176" class="LineNr">1176 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -1243,7 +1243,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1182" class="LineNr">1182 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L1182" class="LineNr">1182 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L1183" class="LineNr">1183 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
<span id="L1183" class="LineNr">1183 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
||||||
<span id="L1184" class="LineNr">1184 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L1184" class="LineNr">1184 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L1185" class="LineNr">1185 </span> 74/jump-if-equal $get-slice-or-stop:mismatch/disp8
|
<span id="L1185" class="LineNr">1185 </span> 74/jump-if-= $get-slice-or-stop:mismatch/disp8
|
||||||
<span id="L1186" class="LineNr">1186 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
<span id="L1186" class="LineNr">1186 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
||||||
<span id="L1187" class="LineNr">1187 </span> eb/jump $get-slice-or-stop:end/disp8
|
<span id="L1187" class="LineNr">1187 </span> eb/jump $get-slice-or-stop:end/disp8
|
||||||
<span id="L1188" class="LineNr">1188 </span><span class="Constant">$get-slice-or-stop:mismatch</span>:
|
<span id="L1188" class="LineNr">1188 </span><span class="Constant">$get-slice-or-stop:mismatch</span>:
|
||||||
|
@ -1467,7 +1467,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1406" class="LineNr">1406 </span><span class="Constant">$maybe-get:search-loop</span>:
|
<span id="L1406" class="LineNr">1406 </span><span class="Constant">$maybe-get:search-loop</span>:
|
||||||
<span id="L1407" class="LineNr">1407 </span> <span class="subxComment"># if (curr >= max) return null</span>
|
<span id="L1407" class="LineNr">1407 </span> <span class="subxComment"># if (curr >= max) return null</span>
|
||||||
<span id="L1408" class="LineNr">1408 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L1408" class="LineNr">1408 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L1409" class="LineNr">1409 </span> 73/jump-if-greater-or-equal-unsigned $maybe-get:null/disp8
|
<span id="L1409" class="LineNr">1409 </span> 73/jump-if-addr>= $maybe-get:null/disp8
|
||||||
<span id="L1410" class="LineNr">1410 </span> <span class="subxComment"># if (string-equal?(key, *curr)) return curr+4</span>
|
<span id="L1410" class="LineNr">1410 </span> <span class="subxComment"># if (string-equal?(key, *curr)) return curr+4</span>
|
||||||
<span id="L1411" class="LineNr">1411 </span> <span class="subxS1Comment"># . eax = string-equal?(key, *curr)</span>
|
<span id="L1411" class="LineNr">1411 </span> <span class="subxS1Comment"># . eax = string-equal?(key, *curr)</span>
|
||||||
<span id="L1412" class="LineNr">1412 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L1412" class="LineNr">1412 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -1479,7 +1479,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1418" class="LineNr">1418 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L1418" class="LineNr">1418 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L1419" class="LineNr">1419 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
<span id="L1419" class="LineNr">1419 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
||||||
<span id="L1420" class="LineNr">1420 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L1420" class="LineNr">1420 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L1421" class="LineNr">1421 </span> 74/jump-if-equal $maybe-get:mismatch/disp8
|
<span id="L1421" class="LineNr">1421 </span> 74/jump-if-= $maybe-get:mismatch/disp8
|
||||||
<span id="L1422" class="LineNr">1422 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
<span id="L1422" class="LineNr">1422 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
||||||
<span id="L1423" class="LineNr">1423 </span> eb/jump $maybe-get:end/disp8
|
<span id="L1423" class="LineNr">1423 </span> eb/jump $maybe-get:end/disp8
|
||||||
<span id="L1424" class="LineNr">1424 </span><span class="Constant">$maybe-get:mismatch</span>:
|
<span id="L1424" class="LineNr">1424 </span><span class="Constant">$maybe-get:mismatch</span>:
|
||||||
|
@ -1614,7 +1614,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1553" class="LineNr">1553 </span><span class="Constant">$maybe-get-slice:search-loop</span>:
|
<span id="L1553" class="LineNr">1553 </span><span class="Constant">$maybe-get-slice:search-loop</span>:
|
||||||
<span id="L1554" class="LineNr">1554 </span> <span class="subxComment"># if (curr >= max) return null</span>
|
<span id="L1554" class="LineNr">1554 </span> <span class="subxComment"># if (curr >= max) return null</span>
|
||||||
<span id="L1555" class="LineNr">1555 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L1555" class="LineNr">1555 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L1556" class="LineNr">1556 </span> 73/jump-if-greater-or-equal-unsigned $maybe-get-slice:null/disp8
|
<span id="L1556" class="LineNr">1556 </span> 73/jump-if-addr>= $maybe-get-slice:null/disp8
|
||||||
<span id="L1557" class="LineNr">1557 </span> <span class="subxComment"># if (slice-equal?(key, *curr)) return curr+4</span>
|
<span id="L1557" class="LineNr">1557 </span> <span class="subxComment"># if (slice-equal?(key, *curr)) return curr+4</span>
|
||||||
<span id="L1558" class="LineNr">1558 </span> <span class="subxS1Comment"># . eax = slice-equal?(key, *curr)</span>
|
<span id="L1558" class="LineNr">1558 </span> <span class="subxS1Comment"># . eax = slice-equal?(key, *curr)</span>
|
||||||
<span id="L1559" class="LineNr">1559 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L1559" class="LineNr">1559 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -1626,7 +1626,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1565" class="LineNr">1565 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L1565" class="LineNr">1565 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L1566" class="LineNr">1566 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
<span id="L1566" class="LineNr">1566 </span> <span class="subxS1Comment"># . if (eax != false) return eax = curr+4</span>
|
||||||
<span id="L1567" class="LineNr">1567 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L1567" class="LineNr">1567 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L1568" class="LineNr">1568 </span> 74/jump-if-equal $maybe-get-slice:mismatch/disp8
|
<span id="L1568" class="LineNr">1568 </span> 74/jump-if-= $maybe-get-slice:mismatch/disp8
|
||||||
<span id="L1569" class="LineNr">1569 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
<span id="L1569" class="LineNr">1569 </span> 8d/copy-address 1/mod/*+disp8 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy ecx+4 to eax</span>
|
||||||
<span id="L1570" class="LineNr">1570 </span> eb/jump $maybe-get-slice:end/disp8
|
<span id="L1570" class="LineNr">1570 </span> eb/jump $maybe-get-slice:end/disp8
|
||||||
<span id="L1571" class="LineNr">1571 </span><span class="Constant">$maybe-get-slice:mismatch</span>:
|
<span id="L1571" class="LineNr">1571 </span><span class="Constant">$maybe-get-slice:mismatch</span>:
|
||||||
|
|
|
@ -94,10 +94,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L35" class="LineNr"> 35 </span><span class="Constant">$slurp:loop</span>:
|
<span id="L35" class="LineNr"> 35 </span><span class="Constant">$slurp:loop</span>:
|
||||||
<span id="L36" class="LineNr"> 36 </span> <span class="subxComment"># if (s->write >= s->length) abort</span>
|
<span id="L36" class="LineNr"> 36 </span> <span class="subxComment"># if (s->write >= s->length) abort</span>
|
||||||
<span id="L37" class="LineNr"> 37 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare edx with *(edi+8)</span>
|
<span id="L37" class="LineNr"> 37 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare edx with *(edi+8)</span>
|
||||||
<span id="L38" class="LineNr"> 38 </span> 7d/jump-if-greater-or-equal $slurp:abort/disp8
|
<span id="L38" class="LineNr"> 38 </span> 7d/jump-if->= $slurp:abort/disp8
|
||||||
<span id="L39" class="LineNr"> 39 </span> <span class="subxComment"># if (f->read >= f->write) populate stream from file</span>
|
<span id="L39" class="LineNr"> 39 </span> <span class="subxComment"># if (f->read >= f->write) populate stream from file</span>
|
||||||
<span id="L40" class="LineNr"> 40 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
<span id="L40" class="LineNr"> 40 </span> 3b/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(esi+4)</span>
|
||||||
<span id="L41" class="LineNr"> 41 </span> 7c/jump-if-lesser $slurp:from-stream/disp8
|
<span id="L41" class="LineNr"> 41 </span> 7c/jump-if-< $slurp:from-stream/disp8
|
||||||
<span id="L42" class="LineNr"> 42 </span> <span class="subxS1Comment"># . clear-stream(stream = f+4)</span>
|
<span id="L42" class="LineNr"> 42 </span> <span class="subxS1Comment"># . clear-stream(stream = f+4)</span>
|
||||||
<span id="L43" class="LineNr"> 43 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L43" class="LineNr"> 43 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L44" class="LineNr"> 44 </span> 8d/copy-address 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+4 to eax</span>
|
<span id="L44" class="LineNr"> 44 </span> 8d/copy-address 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy esi+4 to eax</span>
|
||||||
|
@ -120,7 +120,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L61" class="LineNr"> 61 </span> <span class="subxComment"># since f->read was initially 0, eax is the same as f->write</span>
|
<span id="L61" class="LineNr"> 61 </span> <span class="subxComment"># since f->read was initially 0, eax is the same as f->write</span>
|
||||||
<span id="L62" class="LineNr"> 62 </span> <span class="subxS1Comment"># . if (eax == 0) return true</span>
|
<span id="L62" class="LineNr"> 62 </span> <span class="subxS1Comment"># . if (eax == 0) return true</span>
|
||||||
<span id="L63" class="LineNr"> 63 </span> 3d/compare-eax-and 0/imm32
|
<span id="L63" class="LineNr"> 63 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L64" class="LineNr"> 64 </span> 74/jump-if-equal $slurp:end/disp8
|
<span id="L64" class="LineNr"> 64 </span> 74/jump-if-= $slurp:end/disp8
|
||||||
<span id="L65" class="LineNr"> 65 </span><span class="Constant">$slurp:from-stream</span>:
|
<span id="L65" class="LineNr"> 65 </span><span class="Constant">$slurp:from-stream</span>:
|
||||||
<span id="L66" class="LineNr"> 66 </span> <span class="subxComment"># var c/eax : byte = f->data[f->read]</span>
|
<span id="L66" class="LineNr"> 66 </span> <span class="subxComment"># var c/eax : byte = f->data[f->read]</span>
|
||||||
<span id="L67" class="LineNr"> 67 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
<span id="L67" class="LineNr"> 67 </span> 31/xor 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear eax</span>
|
||||||
|
|
|
@ -121,7 +121,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L62" class="LineNr"> 62 </span> <span class="subxS1Comment"># . if (eax != false) return 4</span>
|
<span id="L62" class="LineNr"> 62 </span> <span class="subxS1Comment"># . if (eax != false) return 4</span>
|
||||||
<span id="L63" class="LineNr"> 63 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L63" class="LineNr"> 63 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L64" class="LineNr"> 64 </span> b8/copy-to-eax 4/imm32 <span class="subxComment"># ZF is set, so we can overwrite eax now</span>
|
<span id="L64" class="LineNr"> 64 </span> b8/copy-to-eax 4/imm32 <span class="subxComment"># ZF is set, so we can overwrite eax now</span>
|
||||||
<span id="L65" class="LineNr"> 65 </span> 75/jump-if-not-equal $compute-width-of-slice:end/disp8
|
<span id="L65" class="LineNr"> 65 </span> 75/jump-if-!= $compute-width-of-slice:end/disp8
|
||||||
<span id="L66" class="LineNr"> 66 </span> <span class="subxComment"># if (has-metadata?(word, "disp32")) return 4</span>
|
<span id="L66" class="LineNr"> 66 </span> <span class="subxComment"># if (has-metadata?(word, "disp32")) return 4</span>
|
||||||
<span id="L67" class="LineNr"> 67 </span> <span class="subxS1Comment"># . eax = has-metadata?(word, "disp32")</span>
|
<span id="L67" class="LineNr"> 67 </span> <span class="subxS1Comment"># . eax = has-metadata?(word, "disp32")</span>
|
||||||
<span id="L68" class="LineNr"> 68 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L68" class="LineNr"> 68 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -134,7 +134,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L75" class="LineNr"> 75 </span> <span class="subxS1Comment"># . if (eax != false) return 4</span>
|
<span id="L75" class="LineNr"> 75 </span> <span class="subxS1Comment"># . if (eax != false) return 4</span>
|
||||||
<span id="L76" class="LineNr"> 76 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L76" class="LineNr"> 76 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L77" class="LineNr"> 77 </span> b8/copy-to-eax 4/imm32 <span class="subxComment"># ZF is set, so we can overwrite eax now</span>
|
<span id="L77" class="LineNr"> 77 </span> b8/copy-to-eax 4/imm32 <span class="subxComment"># ZF is set, so we can overwrite eax now</span>
|
||||||
<span id="L78" class="LineNr"> 78 </span> 75/jump-if-not-equal $compute-width-of-slice:end/disp8
|
<span id="L78" class="LineNr"> 78 </span> 75/jump-if-!= $compute-width-of-slice:end/disp8
|
||||||
<span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># if (has-metadata?(word, "imm16")) return 2</span>
|
<span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># if (has-metadata?(word, "imm16")) return 2</span>
|
||||||
<span id="L80" class="LineNr"> 80 </span> <span class="subxS1Comment"># . eax = has-metadata?(word, "imm16")</span>
|
<span id="L80" class="LineNr"> 80 </span> <span class="subxS1Comment"># . eax = has-metadata?(word, "imm16")</span>
|
||||||
<span id="L81" class="LineNr"> 81 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L81" class="LineNr"> 81 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -147,7 +147,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L88" class="LineNr"> 88 </span> <span class="subxS1Comment"># . if (eax != false) return 2</span>
|
<span id="L88" class="LineNr"> 88 </span> <span class="subxS1Comment"># . if (eax != false) return 2</span>
|
||||||
<span id="L89" class="LineNr"> 89 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L89" class="LineNr"> 89 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L90" class="LineNr"> 90 </span> b8/copy-to-eax 2/imm32 <span class="subxComment"># ZF is set, so we can overwrite eax now</span>
|
<span id="L90" class="LineNr"> 90 </span> b8/copy-to-eax 2/imm32 <span class="subxComment"># ZF is set, so we can overwrite eax now</span>
|
||||||
<span id="L91" class="LineNr"> 91 </span> 75/jump-if-not-equal $compute-width-of-slice:end/disp8
|
<span id="L91" class="LineNr"> 91 </span> 75/jump-if-!= $compute-width-of-slice:end/disp8
|
||||||
<span id="L92" class="LineNr"> 92 </span> <span class="subxComment"># if (has-metadata?(word, "disp16")) return 2</span>
|
<span id="L92" class="LineNr"> 92 </span> <span class="subxComment"># if (has-metadata?(word, "disp16")) return 2</span>
|
||||||
<span id="L93" class="LineNr"> 93 </span> <span class="subxS1Comment"># . eax = has-metadata?(word, "disp16")</span>
|
<span id="L93" class="LineNr"> 93 </span> <span class="subxS1Comment"># . eax = has-metadata?(word, "disp16")</span>
|
||||||
<span id="L94" class="LineNr"> 94 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L94" class="LineNr"> 94 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -160,7 +160,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L101" class="LineNr">101 </span> <span class="subxS1Comment"># . if (eax != false) return 2</span>
|
<span id="L101" class="LineNr">101 </span> <span class="subxS1Comment"># . if (eax != false) return 2</span>
|
||||||
<span id="L102" class="LineNr">102 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L102" class="LineNr">102 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L103" class="LineNr">103 </span> b8/copy-to-eax 2/imm32 <span class="subxComment"># ZF is set, so we can overwrite eax now</span>
|
<span id="L103" class="LineNr">103 </span> b8/copy-to-eax 2/imm32 <span class="subxComment"># ZF is set, so we can overwrite eax now</span>
|
||||||
<span id="L104" class="LineNr">104 </span> 75/jump-if-not-equal $compute-width-of-slice:end/disp8
|
<span id="L104" class="LineNr">104 </span> 75/jump-if-!= $compute-width-of-slice:end/disp8
|
||||||
<span id="L105" class="LineNr">105 </span> <span class="subxComment"># otherwise return 1</span>
|
<span id="L105" class="LineNr">105 </span> <span class="subxComment"># otherwise return 1</span>
|
||||||
<span id="L106" class="LineNr">106 </span> b8/copy-to-eax 1/imm32
|
<span id="L106" class="LineNr">106 </span> b8/copy-to-eax 1/imm32
|
||||||
<span id="L107" class="LineNr">107 </span><span class="Constant">$compute-width-of-slice:end</span>:
|
<span id="L107" class="LineNr">107 </span><span class="Constant">$compute-width-of-slice:end</span>:
|
||||||
|
|
|
@ -87,7 +87,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L27" class="LineNr"> 27 </span><span class="Constant">$emit-hex-array:loop</span>:
|
<span id="L27" class="LineNr"> 27 </span><span class="Constant">$emit-hex-array:loop</span>:
|
||||||
<span id="L28" class="LineNr"> 28 </span> <span class="subxComment"># if (curr >= width) break</span>
|
<span id="L28" class="LineNr"> 28 </span> <span class="subxComment"># if (curr >= width) break</span>
|
||||||
<span id="L29" class="LineNr"> 29 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L29" class="LineNr"> 29 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L30" class="LineNr"> 30 </span> 73/jump-if-greater-or-equal-unsigned $emit-hex-array:end/disp8
|
<span id="L30" class="LineNr"> 30 </span> 73/jump-if-addr>= $emit-hex-array:end/disp8
|
||||||
<span id="L31" class="LineNr"> 31 </span> <span class="subxComment"># emit-hex(out, c = *curr, width=1)</span>
|
<span id="L31" class="LineNr"> 31 </span> <span class="subxComment"># emit-hex(out, c = *curr, width=1)</span>
|
||||||
<span id="L32" class="LineNr"> 32 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L32" class="LineNr"> 32 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L33" class="LineNr"> 33 </span> 68/push 1/imm32/width
|
<span id="L33" class="LineNr"> 33 </span> 68/push 1/imm32/width
|
||||||
|
|
|
@ -91,7 +91,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L32" class="LineNr"> 32 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
|
<span id="L32" class="LineNr"> 32 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
|
||||||
<span id="L33" class="LineNr"> 33 </span> <span class="subxS1Comment"># . if (eax < line->write) goto next check</span>
|
<span id="L33" class="LineNr"> 33 </span> <span class="subxS1Comment"># . if (eax < line->write) goto next check</span>
|
||||||
<span id="L34" class="LineNr"> 34 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with *esi</span>
|
<span id="L34" class="LineNr"> 34 </span> 3b/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with *esi</span>
|
||||||
<span id="L35" class="LineNr"> 35 </span> 7c/jump-if-lesser $next-word-or-string:check-for-comment/disp8
|
<span id="L35" class="LineNr"> 35 </span> 7c/jump-if-< $next-word-or-string:check-for-comment/disp8
|
||||||
<span id="L36" class="LineNr"> 36 </span> <span class="subxS1Comment"># . return out</span>
|
<span id="L36" class="LineNr"> 36 </span> <span class="subxS1Comment"># . return out</span>
|
||||||
<span id="L37" class="LineNr"> 37 </span> c7 0/subop/copy 0/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># copy to *edi</span>
|
<span id="L37" class="LineNr"> 37 </span> c7 0/subop/copy 0/mod/direct 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># copy to *edi</span>
|
||||||
<span id="L38" class="LineNr"> 38 </span> c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># copy to *(edi+4)</span>
|
<span id="L38" class="LineNr"> 38 </span> c7 0/subop/copy 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/disp8 0/imm32 <span class="subxComment"># copy to *(edi+4)</span>
|
||||||
|
@ -107,7 +107,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L48" class="LineNr"> 48 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
<span id="L48" class="LineNr"> 48 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
||||||
<span id="L49" class="LineNr"> 49 </span> <span class="subxS1Comment"># . compare</span>
|
<span id="L49" class="LineNr"> 49 </span> <span class="subxS1Comment"># . compare</span>
|
||||||
<span id="L50" class="LineNr"> 50 </span> 3d/compare-eax-and 0x23/imm32/pound
|
<span id="L50" class="LineNr"> 50 </span> 3d/compare-eax-and 0x23/imm32/pound
|
||||||
<span id="L51" class="LineNr"> 51 </span> 75/jump-if-not-equal $next-word-or-string:check-for-string-literal/disp8
|
<span id="L51" class="LineNr"> 51 </span> 75/jump-if-!= $next-word-or-string:check-for-string-literal/disp8
|
||||||
<span id="L52" class="LineNr"> 52 </span><span class="Constant">$next-word-or-string:comment</span>:
|
<span id="L52" class="LineNr"> 52 </span><span class="Constant">$next-word-or-string:comment</span>:
|
||||||
<span id="L53" class="LineNr"> 53 </span> <span class="subxComment"># out->end = &line->data[line->write]</span>
|
<span id="L53" class="LineNr"> 53 </span> <span class="subxComment"># out->end = &line->data[line->write]</span>
|
||||||
<span id="L54" class="LineNr"> 54 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to eax</span>
|
<span id="L54" class="LineNr"> 54 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to eax</span>
|
||||||
|
@ -125,7 +125,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L66" class="LineNr"> 66 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
<span id="L66" class="LineNr"> 66 </span> 8a/copy-byte 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/AL 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy byte at *(esi+ecx+12) to AL</span>
|
||||||
<span id="L67" class="LineNr"> 67 </span> <span class="subxS1Comment"># . compare</span>
|
<span id="L67" class="LineNr"> 67 </span> <span class="subxS1Comment"># . compare</span>
|
||||||
<span id="L68" class="LineNr"> 68 </span> 3d/compare-eax-and 0x22/imm32/dquote
|
<span id="L68" class="LineNr"> 68 </span> 3d/compare-eax-and 0x22/imm32/dquote
|
||||||
<span id="L69" class="LineNr"> 69 </span> 75/jump-if-not-equal $next-word-or-string:regular-word/disp8
|
<span id="L69" class="LineNr"> 69 </span> 75/jump-if-!= $next-word-or-string:regular-word/disp8
|
||||||
<span id="L70" class="LineNr"> 70 </span><span class="Constant">$next-word-or-string:string-literal</span>:
|
<span id="L70" class="LineNr"> 70 </span><span class="Constant">$next-word-or-string:string-literal</span>:
|
||||||
<span id="L71" class="LineNr"> 71 </span> <span class="subxComment"># skip-string(line)</span>
|
<span id="L71" class="LineNr"> 71 </span> <span class="subxComment"># skip-string(line)</span>
|
||||||
<span id="L72" class="LineNr"> 72 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L72" class="LineNr"> 72 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
|
|
@ -79,7 +79,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L19" class="LineNr"> 19 </span> 8b/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *edi to ecx</span>
|
<span id="L19" class="LineNr"> 19 </span> 8b/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *edi to ecx</span>
|
||||||
<span id="L20" class="LineNr"> 20 </span> <span class="subxComment"># if (out->write >= out->length) abort</span>
|
<span id="L20" class="LineNr"> 20 </span> <span class="subxComment"># if (out->write >= out->length) abort</span>
|
||||||
<span id="L21" class="LineNr"> 21 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(edi+8)</span>
|
<span id="L21" class="LineNr"> 21 </span> 3b/compare 1/mod/*+disp8 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare ecx with *(edi+8)</span>
|
||||||
<span id="L22" class="LineNr"> 22 </span> 7d/jump-if-greater-or-equal $write-int:abort/disp8
|
<span id="L22" class="LineNr"> 22 </span> 7d/jump-if->= $write-int:abort/disp8
|
||||||
<span id="L23" class="LineNr"> 23 </span><span class="Constant">$write-int:to-stream</span>:
|
<span id="L23" class="LineNr"> 23 </span><span class="Constant">$write-int:to-stream</span>:
|
||||||
<span id="L24" class="LineNr"> 24 </span> <span class="subxComment"># out->data[out->write] = n</span>
|
<span id="L24" class="LineNr"> 24 </span> <span class="subxComment"># out->data[out->write] = n</span>
|
||||||
<span id="L25" class="LineNr"> 25 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
<span id="L25" class="LineNr"> 25 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
||||||
|
|
|
@ -86,7 +86,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L26" class="LineNr"> 26 </span><span class="Constant">$clear-stack:loop</span>:
|
<span id="L26" class="LineNr"> 26 </span><span class="Constant">$clear-stack:loop</span>:
|
||||||
<span id="L27" class="LineNr"> 27 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L27" class="LineNr"> 27 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L28" class="LineNr"> 28 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
<span id="L28" class="LineNr"> 28 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax with ecx</span>
|
||||||
<span id="L29" class="LineNr"> 29 </span> 73/jump-if-greater-or-equal-unsigned $clear-stack:end/disp8
|
<span id="L29" class="LineNr"> 29 </span> 73/jump-if-addr>= $clear-stack:end/disp8
|
||||||
<span id="L30" class="LineNr"> 30 </span> <span class="subxComment"># *curr = 0</span>
|
<span id="L30" class="LineNr"> 30 </span> <span class="subxComment"># *curr = 0</span>
|
||||||
<span id="L31" class="LineNr"> 31 </span> c6 0/subop/copy 0/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm8 <span class="subxComment"># copy byte to *eax</span>
|
<span id="L31" class="LineNr"> 31 </span> c6 0/subop/copy 0/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm8 <span class="subxComment"># copy byte to *eax</span>
|
||||||
<span id="L32" class="LineNr"> 32 </span> <span class="subxComment"># ++curr</span>
|
<span id="L32" class="LineNr"> 32 </span> <span class="subxComment"># ++curr</span>
|
||||||
|
@ -181,7 +181,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L121" class="LineNr">121 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span>
|
<span id="L121" class="LineNr">121 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span>
|
||||||
<span id="L122" class="LineNr">122 </span> <span class="subxComment"># if (s->top >= s->length) abort</span>
|
<span id="L122" class="LineNr">122 </span> <span class="subxComment"># if (s->top >= s->length) abort</span>
|
||||||
<span id="L123" class="LineNr">123 </span> 39/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare *(esi+4) and ecx</span>
|
<span id="L123" class="LineNr">123 </span> 39/compare 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># compare *(esi+4) and ecx</span>
|
||||||
<span id="L124" class="LineNr">124 </span> 7e/jump-if-lesser-or-equal $push:abort/disp8
|
<span id="L124" class="LineNr">124 </span> 7e/jump-if-<= $push:abort/disp8
|
||||||
<span id="L125" class="LineNr">125 </span> <span class="subxComment"># s->data[s->top] = n</span>
|
<span id="L125" class="LineNr">125 </span> <span class="subxComment"># s->data[s->top] = n</span>
|
||||||
<span id="L126" class="LineNr">126 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
<span id="L126" class="LineNr">126 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 0xc/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+12) to eax</span>
|
||||||
<span id="L127" class="LineNr">127 </span> 89/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(esi+ecx+8)</span>
|
<span id="L127" class="LineNr">127 </span> 89/copy 1/mod/*+disp8 4/rm32/sib 6/base/esi 1/index/ecx <span class="Normal"> . </span> 0/r32/eax 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy eax to *(esi+ecx+8)</span>
|
||||||
|
@ -298,7 +298,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L238" class="LineNr">238 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to esi</span>
|
<span id="L238" class="LineNr">238 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to esi</span>
|
||||||
<span id="L239" class="LineNr">239 </span> <span class="subxComment"># if (s->top <= 0) abort</span>
|
<span id="L239" class="LineNr">239 </span> <span class="subxComment"># if (s->top <= 0) abort</span>
|
||||||
<span id="L240" class="LineNr">240 </span> 81 7/subop/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *esi</span>
|
<span id="L240" class="LineNr">240 </span> 81 7/subop/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *esi</span>
|
||||||
<span id="L241" class="LineNr">241 </span> 7e/jump-if-lesser-or-equal $pop:abort/disp8
|
<span id="L241" class="LineNr">241 </span> 7e/jump-if-<= $pop:abort/disp8
|
||||||
<span id="L242" class="LineNr">242 </span> <span class="subxComment"># s->top -= 4</span>
|
<span id="L242" class="LineNr">242 </span> <span class="subxComment"># s->top -= 4</span>
|
||||||
<span id="L243" class="LineNr">243 </span> 81 5/subop/subtract 0/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># subtract from *esi</span>
|
<span id="L243" class="LineNr">243 </span> 81 5/subop/subtract 0/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># subtract from *esi</span>
|
||||||
<span id="L244" class="LineNr">244 </span> <span class="subxComment"># eax = s->data[s->top]</span>
|
<span id="L244" class="LineNr">244 </span> <span class="subxComment"># eax = s->data[s->top]</span>
|
||||||
|
@ -402,7 +402,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L342" class="LineNr">342 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to esi</span>
|
<span id="L342" class="LineNr">342 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to esi</span>
|
||||||
<span id="L343" class="LineNr">343 </span> <span class="subxComment"># if (s->top <= 0) abort</span>
|
<span id="L343" class="LineNr">343 </span> <span class="subxComment"># if (s->top <= 0) abort</span>
|
||||||
<span id="L344" class="LineNr">344 </span> 81 7/subop/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *esi</span>
|
<span id="L344" class="LineNr">344 </span> 81 7/subop/compare 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *esi</span>
|
||||||
<span id="L345" class="LineNr">345 </span> 7e/jump-if-lesser-or-equal $top:abort/disp8
|
<span id="L345" class="LineNr">345 </span> 7e/jump-if-<= $top:abort/disp8
|
||||||
<span id="L346" class="LineNr">346 </span> <span class="subxComment"># n = s->data[s->top - 4]</span>
|
<span id="L346" class="LineNr">346 </span> <span class="subxComment"># n = s->data[s->top - 4]</span>
|
||||||
<span id="L347" class="LineNr">347 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span>
|
<span id="L347" class="LineNr">347 </span> 8b/copy 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *esi to ecx</span>
|
||||||
<span id="L348" class="LineNr">348 </span> 81 5/subop/subtract 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># subtract from ecx</span>
|
<span id="L348" class="LineNr">348 </span> 81 5/subop/subtract 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># subtract from ecx</span>
|
||||||
|
|
|
@ -102,7 +102,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L42" class="LineNr"> 42 </span><span class="Constant">$array-equal?:lengths</span>:
|
<span id="L42" class="LineNr"> 42 </span><span class="Constant">$array-equal?:lengths</span>:
|
||||||
<span id="L43" class="LineNr"> 43 </span> <span class="subxComment"># if (lena != b->length) return false</span>
|
<span id="L43" class="LineNr"> 43 </span> <span class="subxComment"># if (lena != b->length) return false</span>
|
||||||
<span id="L44" class="LineNr"> 44 </span> 39/compare *edi 2/r32/edx
|
<span id="L44" class="LineNr"> 44 </span> 39/compare *edi 2/r32/edx
|
||||||
<span id="L45" class="LineNr"> 45 </span> 75/jump-if-not-equal $array-equal?:false/disp8
|
<span id="L45" class="LineNr"> 45 </span> 75/jump-if-!= $array-equal?:false/disp8
|
||||||
<span id="L46" class="LineNr"> 46 </span> <span class="subxComment"># var curra/esi : (addr byte) = a->data</span>
|
<span id="L46" class="LineNr"> 46 </span> <span class="subxComment"># var curra/esi : (addr byte) = a->data</span>
|
||||||
<span id="L47" class="LineNr"> 47 </span> 81 0/subop/add %esi 4/imm32
|
<span id="L47" class="LineNr"> 47 </span> 81 0/subop/add %esi 4/imm32
|
||||||
<span id="L48" class="LineNr"> 48 </span> <span class="subxComment"># var currb/edi : (addr byte) = b->data</span>
|
<span id="L48" class="LineNr"> 48 </span> <span class="subxComment"># var currb/edi : (addr byte) = b->data</span>
|
||||||
|
@ -114,14 +114,14 @@ if ('onhashchange' in window) {
|
||||||
<span id="L54" class="LineNr"> 54 </span><span class="Constant">$array-equal?:loop</span>:
|
<span id="L54" class="LineNr"> 54 </span><span class="Constant">$array-equal?:loop</span>:
|
||||||
<span id="L55" class="LineNr"> 55 </span> <span class="subxComment"># if (i >= lena) return true</span>
|
<span id="L55" class="LineNr"> 55 </span> <span class="subxComment"># if (i >= lena) return true</span>
|
||||||
<span id="L56" class="LineNr"> 56 </span> 39/compare %ecx 2/r32/edx
|
<span id="L56" class="LineNr"> 56 </span> 39/compare %ecx 2/r32/edx
|
||||||
<span id="L57" class="LineNr"> 57 </span> 7d/jump-if-greater-or-equal $array-equal?:true/disp8
|
<span id="L57" class="LineNr"> 57 </span> 7d/jump-if->= $array-equal?:true/disp8
|
||||||
<span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># var vala/eax : int = *curra</span>
|
<span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># var vala/eax : int = *curra</span>
|
||||||
<span id="L59" class="LineNr"> 59 </span> 8b/-> *esi 0/r32/eax
|
<span id="L59" class="LineNr"> 59 </span> 8b/-> *esi 0/r32/eax
|
||||||
<span id="L60" class="LineNr"> 60 </span> <span class="subxComment"># var valb/ebx : int = *currb</span>
|
<span id="L60" class="LineNr"> 60 </span> <span class="subxComment"># var valb/ebx : int = *currb</span>
|
||||||
<span id="L61" class="LineNr"> 61 </span> 8b/-> *edi 3/r32/ebx
|
<span id="L61" class="LineNr"> 61 </span> 8b/-> *edi 3/r32/ebx
|
||||||
<span id="L62" class="LineNr"> 62 </span> <span class="subxComment"># if (vala != valb) return false</span>
|
<span id="L62" class="LineNr"> 62 </span> <span class="subxComment"># if (vala != valb) return false</span>
|
||||||
<span id="L63" class="LineNr"> 63 </span> 39/compare %eax 3/r32/ebx
|
<span id="L63" class="LineNr"> 63 </span> 39/compare %eax 3/r32/ebx
|
||||||
<span id="L64" class="LineNr"> 64 </span> 75/jump-if-not-equal $array-equal?:false/disp8
|
<span id="L64" class="LineNr"> 64 </span> 75/jump-if-!= $array-equal?:false/disp8
|
||||||
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># i += 4</span>
|
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># i += 4</span>
|
||||||
<span id="L66" class="LineNr"> 66 </span> 81 0/subop/add %ecx 4/imm32
|
<span id="L66" class="LineNr"> 66 </span> 81 0/subop/add %ecx 4/imm32
|
||||||
<span id="L67" class="LineNr"> 67 </span> <span class="subxComment"># currs += 4</span>
|
<span id="L67" class="LineNr"> 67 </span> <span class="subxComment"># currs += 4</span>
|
||||||
|
@ -335,7 +335,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L275" class="LineNr">275 </span><span class="Constant">$parse-array-of-ints:loop1</span>:
|
<span id="L275" class="LineNr">275 </span><span class="Constant">$parse-array-of-ints:loop1</span>:
|
||||||
<span id="L276" class="LineNr">276 </span> <span class="subxComment"># if (curr >= end) break</span>
|
<span id="L276" class="LineNr">276 </span> <span class="subxComment"># if (curr >= end) break</span>
|
||||||
<span id="L277" class="LineNr">277 </span> 39/compare %ecx 2/r32/edx
|
<span id="L277" class="LineNr">277 </span> 39/compare %ecx 2/r32/edx
|
||||||
<span id="L278" class="LineNr">278 </span> 73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:break1/disp8
|
<span id="L278" class="LineNr">278 </span> 73/jump-if-addr>= $parse-array-of-ints:break1/disp8
|
||||||
<span id="L279" class="LineNr">279 </span> <span class="subxComment"># curr = skip-chars-matching-in-slice(curr, end, ' ')</span>
|
<span id="L279" class="LineNr">279 </span> <span class="subxComment"># curr = skip-chars-matching-in-slice(curr, end, ' ')</span>
|
||||||
<span id="L280" class="LineNr">280 </span> <span class="subxS1Comment"># . eax = skip-chars-matching-in-slice(curr, end, ' ')</span>
|
<span id="L280" class="LineNr">280 </span> <span class="subxS1Comment"># . eax = skip-chars-matching-in-slice(curr, end, ' ')</span>
|
||||||
<span id="L281" class="LineNr">281 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L281" class="LineNr">281 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -350,7 +350,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L290" class="LineNr">290 </span> 89/<- %ecx 0/r32/eax
|
<span id="L290" class="LineNr">290 </span> 89/<- %ecx 0/r32/eax
|
||||||
<span id="L291" class="LineNr">291 </span> <span class="subxComment"># if (curr >= end) break</span>
|
<span id="L291" class="LineNr">291 </span> <span class="subxComment"># if (curr >= end) break</span>
|
||||||
<span id="L292" class="LineNr">292 </span> 39/compare %ecx 2/r32/edx
|
<span id="L292" class="LineNr">292 </span> 39/compare %ecx 2/r32/edx
|
||||||
<span id="L293" class="LineNr">293 </span> 73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:break1/disp8
|
<span id="L293" class="LineNr">293 </span> 73/jump-if-addr>= $parse-array-of-ints:break1/disp8
|
||||||
<span id="L294" class="LineNr">294 </span> <span class="subxComment"># curr = skip-chars-not-matching-in-slice(curr, end, ' ')</span>
|
<span id="L294" class="LineNr">294 </span> <span class="subxComment"># curr = skip-chars-not-matching-in-slice(curr, end, ' ')</span>
|
||||||
<span id="L295" class="LineNr">295 </span> <span class="subxS1Comment"># . eax = skip-chars-not-matching-in-slice(curr, end, ' ')</span>
|
<span id="L295" class="LineNr">295 </span> <span class="subxS1Comment"># . eax = skip-chars-not-matching-in-slice(curr, end, ' ')</span>
|
||||||
<span id="L296" class="LineNr">296 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L296" class="LineNr">296 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -393,7 +393,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L333" class="LineNr">333 </span><span class="Constant">$parse-array-of-ints:loop2</span>:
|
<span id="L333" class="LineNr">333 </span><span class="Constant">$parse-array-of-ints:loop2</span>:
|
||||||
<span id="L334" class="LineNr">334 </span> <span class="subxComment"># if (slice->start >= end) break</span>
|
<span id="L334" class="LineNr">334 </span> <span class="subxComment"># if (slice->start >= end) break</span>
|
||||||
<span id="L335" class="LineNr">335 </span> 39/compare *ecx 2/r32/edx
|
<span id="L335" class="LineNr">335 </span> 39/compare *ecx 2/r32/edx
|
||||||
<span id="L336" class="LineNr">336 </span> 73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:end/disp8
|
<span id="L336" class="LineNr">336 </span> 73/jump-if-addr>= $parse-array-of-ints:end/disp8
|
||||||
<span id="L337" class="LineNr">337 </span> <span class="subxComment"># slice->start = skip-chars-matching-in-slice(slice->start, end, ' ')</span>
|
<span id="L337" class="LineNr">337 </span> <span class="subxComment"># slice->start = skip-chars-matching-in-slice(slice->start, end, ' ')</span>
|
||||||
<span id="L338" class="LineNr">338 </span> <span class="subxS1Comment"># . eax = skip-chars-matching-in-slice(slice->start, end, ' ')</span>
|
<span id="L338" class="LineNr">338 </span> <span class="subxS1Comment"># . eax = skip-chars-matching-in-slice(slice->start, end, ' ')</span>
|
||||||
<span id="L339" class="LineNr">339 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L339" class="LineNr">339 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -408,7 +408,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L348" class="LineNr">348 </span> 89/<- *ecx 0/r32/eax
|
<span id="L348" class="LineNr">348 </span> 89/<- *ecx 0/r32/eax
|
||||||
<span id="L349" class="LineNr">349 </span> <span class="subxComment"># if (slice->start >= end) break</span>
|
<span id="L349" class="LineNr">349 </span> <span class="subxComment"># if (slice->start >= end) break</span>
|
||||||
<span id="L350" class="LineNr">350 </span> 39/compare *ecx 2/r32/edx
|
<span id="L350" class="LineNr">350 </span> 39/compare *ecx 2/r32/edx
|
||||||
<span id="L351" class="LineNr">351 </span> 73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:end/disp8
|
<span id="L351" class="LineNr">351 </span> 73/jump-if-addr>= $parse-array-of-ints:end/disp8
|
||||||
<span id="L352" class="LineNr">352 </span> <span class="subxComment"># slice->end = skip-chars-not-matching-in-slice(slice->start, end, ' ')</span>
|
<span id="L352" class="LineNr">352 </span> <span class="subxComment"># slice->end = skip-chars-not-matching-in-slice(slice->start, end, ' ')</span>
|
||||||
<span id="L353" class="LineNr">353 </span> <span class="subxS1Comment"># . eax = skip-chars-not-matching-in-slice(curr, end, ' ')</span>
|
<span id="L353" class="LineNr">353 </span> <span class="subxS1Comment"># . eax = skip-chars-not-matching-in-slice(curr, end, ' ')</span>
|
||||||
<span id="L354" class="LineNr">354 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L354" class="LineNr">354 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
|
|
@ -102,7 +102,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L40" class="LineNr"> 40 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span>
|
<span id="L40" class="LineNr"> 40 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span>
|
||||||
<span id="L41" class="LineNr"> 41 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span>
|
<span id="L41" class="LineNr"> 41 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span>
|
||||||
<span id="L42" class="LineNr"> 42 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span>
|
<span id="L42" class="LineNr"> 42 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span>
|
||||||
<span id="L43" class="LineNr"> 43 </span> 7e/jump-if-lesser-or-equal $subx-assort-main:interactive/disp8
|
<span id="L43" class="LineNr"> 43 </span> 7e/jump-if-<= $subx-assort-main:interactive/disp8
|
||||||
<span id="L44" class="LineNr"> 44 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span>
|
<span id="L44" class="LineNr"> 44 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span>
|
||||||
<span id="L45" class="LineNr"> 45 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
<span id="L45" class="LineNr"> 45 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
||||||
<span id="L46" class="LineNr"> 46 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L46" class="LineNr"> 46 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -114,7 +114,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L52" class="LineNr"> 52 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L52" class="LineNr"> 52 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L53" class="LineNr"> 53 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span>
|
<span id="L53" class="LineNr"> 53 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span>
|
||||||
<span id="L54" class="LineNr"> 54 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L54" class="LineNr"> 54 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L55" class="LineNr"> 55 </span> 74/jump-if-equal $subx-assort-main:interactive/disp8
|
<span id="L55" class="LineNr"> 55 </span> 74/jump-if-= $subx-assort-main:interactive/disp8
|
||||||
<span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># run-tests()</span>
|
<span id="L56" class="LineNr"> 56 </span> <span class="subxComment"># run-tests()</span>
|
||||||
<span id="L57" class="LineNr"> 57 </span> e8/call run-tests/disp32
|
<span id="L57" class="LineNr"> 57 </span> e8/call run-tests/disp32
|
||||||
<span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
<span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
||||||
|
@ -539,7 +539,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L525" class="LineNr">525 </span><span class="Constant">$read-segments:check0</span>:
|
<span id="L525" class="LineNr">525 </span><span class="Constant">$read-segments:check0</span>:
|
||||||
<span id="L526" class="LineNr">526 </span> <span class="subxComment"># if (line->write == 0) break</span>
|
<span id="L526" class="LineNr">526 </span> <span class="subxComment"># if (line->write == 0) break</span>
|
||||||
<span id="L527" class="LineNr">527 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span>
|
<span id="L527" class="LineNr">527 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span>
|
||||||
<span id="L528" class="LineNr">528 </span> 0f 84/jump-if-equal $read-segments:<span class="Constant">break</span>/disp32
|
<span id="L528" class="LineNr">528 </span> 0f 84/jump-if-= $read-segments:<span class="Constant">break</span>/disp32
|
||||||
<span id="L529" class="Folded">529 </span><span class="Folded">+-- 33 lines: #? # dump line -----------------------------------------------------------------------------------------------------------------------------</span>
|
<span id="L529" class="Folded">529 </span><span class="Folded">+-- 33 lines: #? # dump line -----------------------------------------------------------------------------------------------------------------------------</span>
|
||||||
<span id="L562" class="LineNr">562 </span> <span class="subxComment"># next-word-or-string(line, word-slice)</span>
|
<span id="L562" class="LineNr">562 </span> <span class="subxComment"># next-word-or-string(line, word-slice)</span>
|
||||||
<span id="L563" class="LineNr">563 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L563" class="LineNr">563 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -561,7 +561,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L587" class="LineNr">587 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L587" class="LineNr">587 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L588" class="LineNr">588 </span> <span class="subxS1Comment"># . if (eax != false) continue</span>
|
<span id="L588" class="LineNr">588 </span> <span class="subxS1Comment"># . if (eax != false) continue</span>
|
||||||
<span id="L589" class="LineNr">589 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L589" class="LineNr">589 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L590" class="LineNr">590 </span> 0f 85/jump-if-not-equal $read-segments:<span class="Constant">loop</span>/disp32
|
<span id="L590" class="LineNr">590 </span> 0f 85/jump-if-!= $read-segments:<span class="Constant">loop</span>/disp32
|
||||||
<span id="L591" class="LineNr">591 </span><span class="Constant">$read-segments:check-for-comment</span>:
|
<span id="L591" class="LineNr">591 </span><span class="Constant">$read-segments:check-for-comment</span>:
|
||||||
<span id="L592" class="Folded">592 </span><span class="Folded">+-- 9 lines: #? # print("check for comment\n") ----------------------------------------------------------------------------------------------------------</span>
|
<span id="L592" class="Folded">592 </span><span class="Folded">+-- 9 lines: #? # print("check for comment\n") ----------------------------------------------------------------------------------------------------------</span>
|
||||||
<span id="L601" class="LineNr">601 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span>
|
<span id="L601" class="LineNr">601 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span>
|
||||||
|
@ -572,7 +572,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L606" class="LineNr">606 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
<span id="L606" class="LineNr">606 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
||||||
<span id="L607" class="LineNr">607 </span> <span class="subxS1Comment"># . if (c == '#') continue</span>
|
<span id="L607" class="LineNr">607 </span> <span class="subxS1Comment"># . if (c == '#') continue</span>
|
||||||
<span id="L608" class="LineNr">608 </span> 3d/compare-eax-and 0x23/imm32/hash
|
<span id="L608" class="LineNr">608 </span> 3d/compare-eax-and 0x23/imm32/hash
|
||||||
<span id="L609" class="LineNr">609 </span> 0f 84/jump-if-equal $read-segments:<span class="Constant">loop</span>/disp32
|
<span id="L609" class="LineNr">609 </span> 0f 84/jump-if-= $read-segments:<span class="Constant">loop</span>/disp32
|
||||||
<span id="L610" class="LineNr">610 </span><span class="Constant">$read-segments:check-for-segment-header</span>:
|
<span id="L610" class="LineNr">610 </span><span class="Constant">$read-segments:check-for-segment-header</span>:
|
||||||
<span id="L611" class="Folded">611 </span><span class="Folded">+-- 9 lines: #? # print("check for segment header\n") ---------------------------------------------------------------------------------------------------</span>
|
<span id="L611" class="Folded">611 </span><span class="Folded">+-- 9 lines: #? # print("check for segment header\n") ---------------------------------------------------------------------------------------------------</span>
|
||||||
<span id="L620" class="Folded">620 </span><span class="Folded">+-- 40 lines: #? # dump word-slice -----------------------------------------------------------------------------------------------------------------------</span>
|
<span id="L620" class="Folded">620 </span><span class="Folded">+-- 40 lines: #? # dump word-slice -----------------------------------------------------------------------------------------------------------------------</span>
|
||||||
|
@ -587,7 +587,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L668" class="LineNr">668 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L668" class="LineNr">668 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L669" class="LineNr">669 </span> <span class="subxS1Comment"># . if (eax == false) goto check3</span>
|
<span id="L669" class="LineNr">669 </span> <span class="subxS1Comment"># . if (eax == false) goto check3</span>
|
||||||
<span id="L670" class="LineNr">670 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L670" class="LineNr">670 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L671" class="LineNr">671 </span> 0f 84/jump-if-equal $read-segments:regular-line/disp32
|
<span id="L671" class="LineNr">671 </span> 0f 84/jump-if-= $read-segments:regular-line/disp32
|
||||||
<span id="L672" class="LineNr">672 </span> <span class="subxComment"># segment-name = next-word-or-string(line)</span>
|
<span id="L672" class="LineNr">672 </span> <span class="subxComment"># segment-name = next-word-or-string(line)</span>
|
||||||
<span id="L673" class="LineNr">673 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L673" class="LineNr">673 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L674" class="LineNr">674 </span> 52/push-edx
|
<span id="L674" class="LineNr">674 </span> 52/push-edx
|
||||||
|
@ -610,7 +610,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L730" class="LineNr">730 </span> 8b/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *eax to ebx</span>
|
<span id="L730" class="LineNr">730 </span> 8b/copy 0/mod/indirect 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy *eax to ebx</span>
|
||||||
<span id="L731" class="LineNr">731 </span> <span class="subxComment"># if (curr-segment != 0) continue</span>
|
<span id="L731" class="LineNr">731 </span> <span class="subxComment"># if (curr-segment != 0) continue</span>
|
||||||
<span id="L732" class="LineNr">732 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ebx</span>
|
<span id="L732" class="LineNr">732 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L733" class="LineNr">733 </span> 0f 85/jump-if-not-equal $read-segments:<span class="Constant">loop</span>/disp32
|
<span id="L733" class="LineNr">733 </span> 0f 85/jump-if-!= $read-segments:<span class="Constant">loop</span>/disp32
|
||||||
<span id="L734" class="LineNr">734 </span> <span class="subxComment"># curr-segment = new-stream(Heap, Segment-size, 1)</span>
|
<span id="L734" class="LineNr">734 </span> <span class="subxComment"># curr-segment = new-stream(Heap, Segment-size, 1)</span>
|
||||||
<span id="L735" class="LineNr">735 </span> <span class="subxS1Comment"># . save segment-slot</span>
|
<span id="L735" class="LineNr">735 </span> <span class="subxS1Comment"># . save segment-slot</span>
|
||||||
<span id="L736" class="LineNr">736 </span> 50/push-eax
|
<span id="L736" class="LineNr">736 </span> 50/push-eax
|
||||||
|
@ -695,7 +695,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L871" class="LineNr">871 </span><span class="Constant">$write-segments:loop</span>:
|
<span id="L871" class="LineNr">871 </span><span class="Constant">$write-segments:loop</span>:
|
||||||
<span id="L872" class="LineNr">872 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L872" class="LineNr">872 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L873" class="LineNr">873 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with edx</span>
|
<span id="L873" class="LineNr">873 </span> 39/compare 3/mod/direct 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare esi with edx</span>
|
||||||
<span id="L874" class="LineNr">874 </span> 73/jump-if-greater-or-equal-unsigned $write-segments:<span class="Constant">break</span>/disp8
|
<span id="L874" class="LineNr">874 </span> 73/jump-if-addr>= $write-segments:<span class="Constant">break</span>/disp8
|
||||||
<span id="L875" class="LineNr">875 </span> <span class="subxComment"># var stream/eax : (addr stream byte) = table[i].stream</span>
|
<span id="L875" class="LineNr">875 </span> <span class="subxComment"># var stream/eax : (addr stream byte) = table[i].stream</span>
|
||||||
<span id="L876" class="LineNr">876 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
|
<span id="L876" class="LineNr">876 </span> 8b/copy 1/mod/*+disp8 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 4/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(esi+4) to eax</span>
|
||||||
<span id="L877" class="LineNr">877 </span> <span class="subxComment"># write-stream-data(out, stream)</span>
|
<span id="L877" class="LineNr">877 </span> <span class="subxComment"># write-stream-data(out, stream)</span>
|
||||||
|
|
|
@ -116,11 +116,11 @@ if ('onhashchange' in window) {
|
||||||
<span id="L57" class="LineNr"> 57 </span> (<a href='../053new-segment.subx.html#L41'>new-segment</a> *<span class="SpecialChar"><a href='../069allocate.subx.html#L29'>Heap-size</a></span> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span>)
|
<span id="L57" class="LineNr"> 57 </span> (<a href='../053new-segment.subx.html#L41'>new-segment</a> *<span class="SpecialChar"><a href='../069allocate.subx.html#L29'>Heap-size</a></span> <span class="SpecialChar"><a href='../069allocate.subx.html#L22'>Heap</a></span>)
|
||||||
<span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span>
|
<span id="L58" class="LineNr"> 58 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span>
|
||||||
<span id="L59" class="LineNr"> 59 </span> 81 7/subop/compare *ebp 1/imm32
|
<span id="L59" class="LineNr"> 59 </span> 81 7/subop/compare *ebp 1/imm32
|
||||||
<span id="L60" class="LineNr"> 60 </span> 7e/jump-if-lesser-or-equal $subx-braces-main:interactive/disp8
|
<span id="L60" class="LineNr"> 60 </span> 7e/jump-if-<= $subx-braces-main:interactive/disp8
|
||||||
<span id="L61" class="LineNr"> 61 </span> <span class="subxComment"># if (argv[1] != "test")) goto interactive</span>
|
<span id="L61" class="LineNr"> 61 </span> <span class="subxComment"># if (argv[1] != "test")) goto interactive</span>
|
||||||
<span id="L62" class="LineNr"> 62 </span> (<a href='../052kernel-string-equal.subx.html#L33'>kernel-string-equal?</a> *(ebp+8) <span class="Constant">"test"</span>) <span class="subxComment"># => eax</span>
|
<span id="L62" class="LineNr"> 62 </span> (<a href='../052kernel-string-equal.subx.html#L33'>kernel-string-equal?</a> *(ebp+8) <span class="Constant">"test"</span>) <span class="subxComment"># => eax</span>
|
||||||
<span id="L63" class="LineNr"> 63 </span> 3d/compare-eax-and 0/imm32
|
<span id="L63" class="LineNr"> 63 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L64" class="LineNr"> 64 </span> 74/jump-if-equal $subx-braces-main:interactive/disp8
|
<span id="L64" class="LineNr"> 64 </span> 74/jump-if-= $subx-braces-main:interactive/disp8
|
||||||
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment">#</span>
|
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment">#</span>
|
||||||
<span id="L66" class="LineNr"> 66 </span> (run-tests)
|
<span id="L66" class="LineNr"> 66 </span> (run-tests)
|
||||||
<span id="L67" class="LineNr"> 67 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
<span id="L67" class="LineNr"> 67 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
||||||
|
@ -205,7 +205,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L146" class="LineNr">146 </span><span class="Constant">$subx-braces:check0</span>:
|
<span id="L146" class="LineNr">146 </span><span class="Constant">$subx-braces:check0</span>:
|
||||||
<span id="L147" class="LineNr">147 </span> <span class="subxComment"># if (line->write == 0) break</span>
|
<span id="L147" class="LineNr">147 </span> <span class="subxComment"># if (line->write == 0) break</span>
|
||||||
<span id="L148" class="LineNr">148 </span> 81 7/subop/compare *ecx 0/imm32
|
<span id="L148" class="LineNr">148 </span> 81 7/subop/compare *ecx 0/imm32
|
||||||
<span id="L149" class="LineNr">149 </span> 0f 84/jump-if-equal $subx-braces:<span class="Constant">break</span>/disp32
|
<span id="L149" class="LineNr">149 </span> 0f 84/jump-if-= $subx-braces:<span class="Constant">break</span>/disp32
|
||||||
<span id="L150" class="LineNr">150 </span> (<a href='../073next-token.subx.html#L464'>skip-chars-matching-whitespace</a> %ecx)
|
<span id="L150" class="LineNr">150 </span> (<a href='../073next-token.subx.html#L464'>skip-chars-matching-whitespace</a> %ecx)
|
||||||
<span id="L151" class="LineNr">151 </span><span class="Constant">$subx-braces:check-for-curly-open</span>:
|
<span id="L151" class="LineNr">151 </span><span class="Constant">$subx-braces:check-for-curly-open</span>:
|
||||||
<span id="L152" class="LineNr">152 </span> <span class="subxComment"># if (line->data[line->read] != '{') goto next check</span>
|
<span id="L152" class="LineNr">152 </span> <span class="subxComment"># if (line->data[line->read] != '{') goto next check</span>
|
||||||
|
@ -215,7 +215,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L156" class="LineNr">156 </span> 81 4/subop/and %eax 0xff/imm32
|
<span id="L156" class="LineNr">156 </span> 81 4/subop/and %eax 0xff/imm32
|
||||||
<span id="L157" class="LineNr">157 </span> <span class="subxS1Comment"># . if (eax != '{') continue</span>
|
<span id="L157" class="LineNr">157 </span> <span class="subxS1Comment"># . if (eax != '{') continue</span>
|
||||||
<span id="L158" class="LineNr">158 </span> 3d/compare-eax-and 0x7b/imm32/open-curly
|
<span id="L158" class="LineNr">158 </span> 3d/compare-eax-and 0x7b/imm32/open-curly
|
||||||
<span id="L159" class="LineNr">159 </span> 0f 85/jump-if-not-equal $subx-braces:check-for-curly-closed/disp32
|
<span id="L159" class="LineNr">159 </span> 0f 85/jump-if-!= $subx-braces:check-for-curly-closed/disp32
|
||||||
<span id="L160" class="LineNr">160 </span><span class="Constant">$subx-braces:emit-curly-open</span>:
|
<span id="L160" class="LineNr">160 </span><span class="Constant">$subx-braces:emit-curly-open</span>:
|
||||||
<span id="L161" class="LineNr">161 </span> <span class="subxComment"># print(out, "_loop" next-label-id ":")</span>
|
<span id="L161" class="LineNr">161 </span> <span class="subxComment"># print(out, "_loop" next-label-id ":")</span>
|
||||||
<span id="L162" class="LineNr">162 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+0xc) <span class="Constant">"_loop"</span>)
|
<span id="L162" class="LineNr">162 </span> (<a href='../065write-buffered.subx.html#L8'>write-buffered</a> *(ebp+0xc) <span class="Constant">"_loop"</span>)
|
||||||
|
@ -230,7 +230,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L171" class="LineNr">171 </span><span class="Constant">$subx-braces:check-for-curly-closed</span>:
|
<span id="L171" class="LineNr">171 </span><span class="Constant">$subx-braces:check-for-curly-closed</span>:
|
||||||
<span id="L172" class="LineNr">172 </span> <span class="subxComment"># if (line->data[line->read] != '}') goto next check</span>
|
<span id="L172" class="LineNr">172 </span> <span class="subxComment"># if (line->data[line->read] != '}') goto next check</span>
|
||||||
<span id="L173" class="LineNr">173 </span> 3d/compare-eax-and 0x7d/imm32/close-curly
|
<span id="L173" class="LineNr">173 </span> 3d/compare-eax-and 0x7d/imm32/close-curly
|
||||||
<span id="L174" class="LineNr">174 </span> 0f 85/jump-if-equal $subx-braces:word-loop/disp32
|
<span id="L174" class="LineNr">174 </span> 0f 85/jump-if-= $subx-braces:word-loop/disp32
|
||||||
<span id="L175" class="LineNr">175 </span><span class="Constant">$subx-braces:emit-curly-closed</span>:
|
<span id="L175" class="LineNr">175 </span><span class="Constant">$subx-braces:emit-curly-closed</span>:
|
||||||
<span id="L176" class="LineNr">176 </span> <span class="subxComment"># eax = pop(label-stack)</span>
|
<span id="L176" class="LineNr">176 </span> <span class="subxComment"># eax = pop(label-stack)</span>
|
||||||
<span id="L177" class="LineNr">177 </span> (<a href='../092stack.subx.html#L230'>pop</a> %edx)
|
<span id="L177" class="LineNr">177 </span> (<a href='../092stack.subx.html#L230'>pop</a> %edx)
|
||||||
|
@ -246,7 +246,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L187" class="LineNr">187 </span> <span class="subxComment"># if (slice-empty?(word-slice)) break</span>
|
<span id="L187" class="LineNr">187 </span> <span class="subxComment"># if (slice-empty?(word-slice)) break</span>
|
||||||
<span id="L188" class="LineNr">188 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %edi)
|
<span id="L188" class="LineNr">188 </span> (<a href='../072slice.subx.html#L9'>slice-empty?</a> %edi)
|
||||||
<span id="L189" class="LineNr">189 </span> 3d/compare-eax-and 0/imm32
|
<span id="L189" class="LineNr">189 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L190" class="LineNr">190 </span> 0f 85/jump-if-not-equal $subx-braces:next-line/disp32
|
<span id="L190" class="LineNr">190 </span> 0f 85/jump-if-!= $subx-braces:next-line/disp32
|
||||||
<span id="L191" class="LineNr">191 </span><span class="Constant">$subx-braces:check-for-comment</span>:
|
<span id="L191" class="LineNr">191 </span><span class="Constant">$subx-braces:check-for-comment</span>:
|
||||||
<span id="L192" class="LineNr">192 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span>
|
<span id="L192" class="LineNr">192 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span>
|
||||||
<span id="L193" class="LineNr">193 </span> <span class="subxS1Comment"># . eax = *word-slice->start</span>
|
<span id="L193" class="LineNr">193 </span> <span class="subxS1Comment"># . eax = *word-slice->start</span>
|
||||||
|
@ -255,14 +255,14 @@ if ('onhashchange' in window) {
|
||||||
<span id="L196" class="LineNr">196 </span> 81 4/subop/and %eax 0xff/imm32
|
<span id="L196" class="LineNr">196 </span> 81 4/subop/and %eax 0xff/imm32
|
||||||
<span id="L197" class="LineNr">197 </span> <span class="subxS1Comment"># . if (eax == '#') continue</span>
|
<span id="L197" class="LineNr">197 </span> <span class="subxS1Comment"># . if (eax == '#') continue</span>
|
||||||
<span id="L198" class="LineNr">198 </span> 3d/compare-eax-and 0x23/imm32/hash
|
<span id="L198" class="LineNr">198 </span> 3d/compare-eax-and 0x23/imm32/hash
|
||||||
<span id="L199" class="LineNr">199 </span> 74/jump-if-equal $subx-braces:word-loop/disp8
|
<span id="L199" class="LineNr">199 </span> 74/jump-if-= $subx-braces:word-loop/disp8
|
||||||
<span id="L200" class="LineNr">200 </span><span class="Constant">$subx-braces:check-for-break</span>:
|
<span id="L200" class="LineNr">200 </span><span class="Constant">$subx-braces:check-for-break</span>:
|
||||||
<span id="L201" class="LineNr">201 </span> <span class="subxComment"># if (!slice-starts-with?(word-slice, "break/")) goto next check</span>
|
<span id="L201" class="LineNr">201 </span> <span class="subxComment"># if (!slice-starts-with?(word-slice, "break/")) goto next check</span>
|
||||||
<span id="L202" class="LineNr">202 </span> <span class="subxS1Comment"># . eax = slice-starts-with?(word-slice, "break/")</span>
|
<span id="L202" class="LineNr">202 </span> <span class="subxS1Comment"># . eax = slice-starts-with?(word-slice, "break/")</span>
|
||||||
<span id="L203" class="LineNr">203 </span> (<a href='../072slice.subx.html#L458'>slice-starts-with?</a> %edi <span class="Constant">"break/"</span>)
|
<span id="L203" class="LineNr">203 </span> (<a href='../072slice.subx.html#L458'>slice-starts-with?</a> %edi <span class="Constant">"break/"</span>)
|
||||||
<span id="L204" class="LineNr">204 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span>
|
<span id="L204" class="LineNr">204 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span>
|
||||||
<span id="L205" class="LineNr">205 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L205" class="LineNr">205 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L206" class="LineNr">206 </span> 74/jump-if-equal $subx-braces:check-for-loop/disp8
|
<span id="L206" class="LineNr">206 </span> 74/jump-if-= $subx-braces:check-for-loop/disp8
|
||||||
<span id="L207" class="LineNr">207 </span><span class="Constant">$subx-braces:emit-break</span>:
|
<span id="L207" class="LineNr">207 </span><span class="Constant">$subx-braces:emit-break</span>:
|
||||||
<span id="L208" class="LineNr">208 </span> (<a href='../092stack.subx.html#L334'>top</a> %edx)
|
<span id="L208" class="LineNr">208 </span> (<a href='../092stack.subx.html#L334'>top</a> %edx)
|
||||||
<span id="L209" class="LineNr">209 </span> <span class="subxComment"># print(out, "_break" eax)</span>
|
<span id="L209" class="LineNr">209 </span> <span class="subxComment"># print(out, "_break" eax)</span>
|
||||||
|
@ -278,7 +278,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L219" class="LineNr">219 </span> (<a href='../072slice.subx.html#L458'>slice-starts-with?</a> %edi <span class="Constant">"loop/"</span>)
|
<span id="L219" class="LineNr">219 </span> (<a href='../072slice.subx.html#L458'>slice-starts-with?</a> %edi <span class="Constant">"loop/"</span>)
|
||||||
<span id="L220" class="LineNr">220 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span>
|
<span id="L220" class="LineNr">220 </span> <span class="subxS1Comment"># . if (eax == false) goto next check</span>
|
||||||
<span id="L221" class="LineNr">221 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L221" class="LineNr">221 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L222" class="LineNr">222 </span> 74/jump-if-equal $subx-braces:emit-word-slice/disp8
|
<span id="L222" class="LineNr">222 </span> 74/jump-if-= $subx-braces:emit-word-slice/disp8
|
||||||
<span id="L223" class="LineNr">223 </span><span class="Constant">$subx-braces:emit-loop</span>:
|
<span id="L223" class="LineNr">223 </span><span class="Constant">$subx-braces:emit-loop</span>:
|
||||||
<span id="L224" class="LineNr">224 </span> (<a href='../092stack.subx.html#L334'>top</a> %edx)
|
<span id="L224" class="LineNr">224 </span> (<a href='../092stack.subx.html#L334'>top</a> %edx)
|
||||||
<span id="L225" class="LineNr">225 </span> <span class="subxComment"># print(out, "_loop" eax)</span>
|
<span id="L225" class="LineNr">225 </span> <span class="subxComment"># print(out, "_loop" eax)</span>
|
||||||
|
|
|
@ -102,7 +102,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L41" class="LineNr"> 41 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span>
|
<span id="L41" class="LineNr"> 41 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span>
|
||||||
<span id="L42" class="LineNr"> 42 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span>
|
<span id="L42" class="LineNr"> 42 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span>
|
||||||
<span id="L43" class="LineNr"> 43 </span> 81 7/subop/compare *ebp 1/imm32
|
<span id="L43" class="LineNr"> 43 </span> 81 7/subop/compare *ebp 1/imm32
|
||||||
<span id="L44" class="LineNr"> 44 </span> 7e/jump-if-lesser-or-equal $subx-calls-main:interactive/disp8
|
<span id="L44" class="LineNr"> 44 </span> 7e/jump-if-<= $subx-calls-main:interactive/disp8
|
||||||
<span id="L45" class="LineNr"> 45 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span>
|
<span id="L45" class="LineNr"> 45 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span>
|
||||||
<span id="L46" class="LineNr"> 46 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
<span id="L46" class="LineNr"> 46 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
||||||
<span id="L47" class="LineNr"> 47 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L47" class="LineNr"> 47 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -114,7 +114,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L53" class="LineNr"> 53 </span> 81 0/subop/add %esp 8/imm32
|
<span id="L53" class="LineNr"> 53 </span> 81 0/subop/add %esp 8/imm32
|
||||||
<span id="L54" class="LineNr"> 54 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span>
|
<span id="L54" class="LineNr"> 54 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span>
|
||||||
<span id="L55" class="LineNr"> 55 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L55" class="LineNr"> 55 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L56" class="LineNr"> 56 </span> 74/jump-if-equal $subx-calls-main:interactive/disp8
|
<span id="L56" class="LineNr"> 56 </span> 74/jump-if-= $subx-calls-main:interactive/disp8
|
||||||
<span id="L57" class="LineNr"> 57 </span> <span class="subxComment"># run-tests()</span>
|
<span id="L57" class="LineNr"> 57 </span> <span class="subxComment"># run-tests()</span>
|
||||||
<span id="L58" class="LineNr"> 58 </span> e8/call run-tests/disp32
|
<span id="L58" class="LineNr"> 58 </span> e8/call run-tests/disp32
|
||||||
<span id="L59" class="LineNr"> 59 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
<span id="L59" class="LineNr"> 59 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
||||||
|
@ -197,7 +197,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L136" class="LineNr"> 136 </span><span class="Constant">$subx-calls:check0</span>:
|
<span id="L136" class="LineNr"> 136 </span><span class="Constant">$subx-calls:check0</span>:
|
||||||
<span id="L137" class="LineNr"> 137 </span> <span class="subxComment"># if (line->write == 0) break</span>
|
<span id="L137" class="LineNr"> 137 </span> <span class="subxComment"># if (line->write == 0) break</span>
|
||||||
<span id="L138" class="LineNr"> 138 </span> 81 7/subop/compare *esi 0/imm32
|
<span id="L138" class="LineNr"> 138 </span> 81 7/subop/compare *esi 0/imm32
|
||||||
<span id="L139" class="LineNr"> 139 </span> 0f 84/jump-if-equal $subx-calls:<span class="Constant">break</span>/disp32
|
<span id="L139" class="LineNr"> 139 </span> 0f 84/jump-if-= $subx-calls:<span class="Constant">break</span>/disp32
|
||||||
<span id="L140" class="LineNr"> 140 </span> <span class="subxComment"># skip-chars-matching-whitespace(line)</span>
|
<span id="L140" class="LineNr"> 140 </span> <span class="subxComment"># skip-chars-matching-whitespace(line)</span>
|
||||||
<span id="L141" class="LineNr"> 141 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L141" class="LineNr"> 141 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L142" class="LineNr"> 142 </span> 56/push-esi
|
<span id="L142" class="LineNr"> 142 </span> 56/push-esi
|
||||||
|
@ -213,7 +213,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L152" class="LineNr"> 152 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
<span id="L152" class="LineNr"> 152 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
<span id="L153" class="LineNr"> 153 </span> <span class="subxS1Comment"># . if (eax == '(') goto convert-call</span>
|
<span id="L153" class="LineNr"> 153 </span> <span class="subxS1Comment"># . if (eax == '(') goto convert-call</span>
|
||||||
<span id="L154" class="LineNr"> 154 </span> 3d/compare-eax-and 0x28/imm32/open-paren
|
<span id="L154" class="LineNr"> 154 </span> 3d/compare-eax-and 0x28/imm32/open-paren
|
||||||
<span id="L155" class="LineNr"> 155 </span> 74/jump-if-equal $subx-calls:convert-call/disp8
|
<span id="L155" class="LineNr"> 155 </span> 74/jump-if-= $subx-calls:convert-call/disp8
|
||||||
<span id="L156" class="LineNr"> 156 </span><span class="Constant">$subx-calls:pass-through</span>:
|
<span id="L156" class="LineNr"> 156 </span><span class="Constant">$subx-calls:pass-through</span>:
|
||||||
<span id="L157" class="LineNr"> 157 </span> <span class="subxComment"># write-stream-data(out, line)</span>
|
<span id="L157" class="LineNr"> 157 </span> <span class="subxComment"># write-stream-data(out, line)</span>
|
||||||
<span id="L158" class="LineNr"> 158 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L158" class="LineNr"> 158 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -331,7 +331,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L270" class="LineNr"> 270 </span> 81 0/subop/add %esp 4/imm32
|
<span id="L270" class="LineNr"> 270 </span> 81 0/subop/add %esp 4/imm32
|
||||||
<span id="L271" class="LineNr"> 271 </span> <span class="subxS1Comment"># . if (eax != false) break</span>
|
<span id="L271" class="LineNr"> 271 </span> <span class="subxS1Comment"># . if (eax != false) break</span>
|
||||||
<span id="L272" class="LineNr"> 272 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L272" class="LineNr"> 272 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L273" class="LineNr"> 273 </span> 0f 85/jump-if-not-equal $parse-line:end/disp32
|
<span id="L273" class="LineNr"> 273 </span> 0f 85/jump-if-!= $parse-line:end/disp32
|
||||||
<span id="L274" class="Folded"> 274 </span><span class="Folded">+-- 40 lines: #? # dump word-slice -----------------------------------------------------------------------------------------------------------------------</span>
|
<span id="L274" class="Folded"> 274 </span><span class="Folded">+-- 40 lines: #? # dump word-slice -----------------------------------------------------------------------------------------------------------------------</span>
|
||||||
<span id="L314" class="LineNr"> 314 </span><span class="Constant">$parse-line:write-word</span>:
|
<span id="L314" class="LineNr"> 314 </span><span class="Constant">$parse-line:write-word</span>:
|
||||||
<span id="L315" class="LineNr"> 315 </span> <span class="subxComment"># write-int(words, word-slice->start)</span>
|
<span id="L315" class="LineNr"> 315 </span> <span class="subxComment"># write-int(words, word-slice->start)</span>
|
||||||
|
@ -402,7 +402,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L380" class="LineNr"> 380 </span> <span class="subxS1Comment"># . ecx = words->write - 8</span>
|
<span id="L380" class="LineNr"> 380 </span> <span class="subxS1Comment"># . ecx = words->write - 8</span>
|
||||||
<span id="L381" class="LineNr"> 381 </span> 8b/-> *esi 1/r32/ecx
|
<span id="L381" class="LineNr"> 381 </span> 8b/-> *esi 1/r32/ecx
|
||||||
<span id="L382" class="LineNr"> 382 </span> 81 5/subop/subtract %ecx 8/imm32
|
<span id="L382" class="LineNr"> 382 </span> 81 5/subop/subtract %ecx 8/imm32
|
||||||
<span id="L383" class="LineNr"> 383 </span> 0f 8c/jump-if-lesser $emit-call:error1/disp32
|
<span id="L383" class="LineNr"> 383 </span> 0f 8c/jump-if-< $emit-call:error1/disp32
|
||||||
<span id="L384" class="LineNr"> 384 </span> <span class="subxComment"># var curr/ecx : (addr slice) = &words->data[words->write-8]</span>
|
<span id="L384" class="LineNr"> 384 </span> <span class="subxComment"># var curr/ecx : (addr slice) = &words->data[words->write-8]</span>
|
||||||
<span id="L385" class="LineNr"> 385 </span> 8d/copy-address *(esi+ecx+0xc) 1/r32/ecx
|
<span id="L385" class="LineNr"> 385 </span> 8d/copy-address *(esi+ecx+0xc) 1/r32/ecx
|
||||||
<span id="L386" class="LineNr"> 386 </span> <span class="subxComment"># var min/edx : (addr byte) = words->data</span>
|
<span id="L386" class="LineNr"> 386 </span> <span class="subxComment"># var min/edx : (addr byte) = words->data</span>
|
||||||
|
@ -411,7 +411,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L389" class="LineNr"> 389 </span><span class="Constant">$emit-call:push-loop</span>:
|
<span id="L389" class="LineNr"> 389 </span><span class="Constant">$emit-call:push-loop</span>:
|
||||||
<span id="L390" class="LineNr"> 390 </span> <span class="subxComment"># if (curr <= min) break</span>
|
<span id="L390" class="LineNr"> 390 </span> <span class="subxComment"># if (curr <= min) break</span>
|
||||||
<span id="L391" class="LineNr"> 391 </span> 39/compare %ecx 2/r32/edx
|
<span id="L391" class="LineNr"> 391 </span> 39/compare %ecx 2/r32/edx
|
||||||
<span id="L392" class="LineNr"> 392 </span> 0f 8e/jump-if-lesser-or-equal $emit-call:call-instruction/disp32
|
<span id="L392" class="LineNr"> 392 </span> 0f 8e/jump-if-<= $emit-call:call-instruction/disp32
|
||||||
<span id="L393" class="LineNr"> 393 </span> <span class="subxComment"># if (*curr->start in '%' '*') goto push-rm32</span>
|
<span id="L393" class="LineNr"> 393 </span> <span class="subxComment"># if (*curr->start in '%' '*') goto push-rm32</span>
|
||||||
<span id="L394" class="LineNr"> 394 </span> <span class="subxS1Comment"># . var start/eax : (addr byte) = curr->start</span>
|
<span id="L394" class="LineNr"> 394 </span> <span class="subxS1Comment"># . var start/eax : (addr byte) = curr->start</span>
|
||||||
<span id="L395" class="LineNr"> 395 </span> 8b/-> *ecx 0/r32/eax
|
<span id="L395" class="LineNr"> 395 </span> 8b/-> *ecx 0/r32/eax
|
||||||
|
@ -420,10 +420,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L398" class="LineNr"> 398 </span> 81 4/subop/and %eax 0xff/imm32
|
<span id="L398" class="LineNr"> 398 </span> 81 4/subop/and %eax 0xff/imm32
|
||||||
<span id="L399" class="LineNr"> 399 </span> <span class="subxS1Comment"># . if (c == '%') goto push-rm32</span>
|
<span id="L399" class="LineNr"> 399 </span> <span class="subxS1Comment"># . if (c == '%') goto push-rm32</span>
|
||||||
<span id="L400" class="LineNr"> 400 </span> 3d/compare-eax-and 0x25/imm32/percent
|
<span id="L400" class="LineNr"> 400 </span> 3d/compare-eax-and 0x25/imm32/percent
|
||||||
<span id="L401" class="LineNr"> 401 </span> 74/jump-if-equal $emit-call:push-rm32/disp8
|
<span id="L401" class="LineNr"> 401 </span> 74/jump-if-= $emit-call:push-rm32/disp8
|
||||||
<span id="L402" class="LineNr"> 402 </span> <span class="subxS1Comment"># . if (c == '*') goto push-rm32</span>
|
<span id="L402" class="LineNr"> 402 </span> <span class="subxS1Comment"># . if (c == '*') goto push-rm32</span>
|
||||||
<span id="L403" class="LineNr"> 403 </span> 3d/compare-eax-and 0x2a/imm32/asterisk
|
<span id="L403" class="LineNr"> 403 </span> 3d/compare-eax-and 0x2a/imm32/asterisk
|
||||||
<span id="L404" class="LineNr"> 404 </span> 74/jump-if-equal $emit-call:push-rm32/disp8
|
<span id="L404" class="LineNr"> 404 </span> 74/jump-if-= $emit-call:push-rm32/disp8
|
||||||
<span id="L405" class="LineNr"> 405 </span><span class="Constant">$emit-call:push-imm32</span>:
|
<span id="L405" class="LineNr"> 405 </span><span class="Constant">$emit-call:push-imm32</span>:
|
||||||
<span id="L406" class="LineNr"> 406 </span> <span class="subxComment"># write-buffered(out, "68/push ")</span>
|
<span id="L406" class="LineNr"> 406 </span> <span class="subxComment"># write-buffered(out, "68/push ")</span>
|
||||||
<span id="L407" class="LineNr"> 407 </span> 68/push <span class="Constant">"68/push "</span>/imm32
|
<span id="L407" class="LineNr"> 407 </span> 68/push <span class="Constant">"68/push "</span>/imm32
|
||||||
|
@ -814,7 +814,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L824" class="LineNr"> 824 </span> 8b/-> *(esi+4) 1/r32/ecx
|
<span id="L824" class="LineNr"> 824 </span> 8b/-> *(esi+4) 1/r32/ecx
|
||||||
<span id="L825" class="LineNr"> 825 </span> <span class="subxS1Comment"># . if (ecx >= line->write) return out = {0, 0}</span>
|
<span id="L825" class="LineNr"> 825 </span> <span class="subxS1Comment"># . if (ecx >= line->write) return out = {0, 0}</span>
|
||||||
<span id="L826" class="LineNr"> 826 </span> 3b/compare 1/r32/ecx *esi
|
<span id="L826" class="LineNr"> 826 </span> 3b/compare 1/r32/ecx *esi
|
||||||
<span id="L827" class="LineNr"> 827 </span> 0f 8d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:return-eol/disp32
|
<span id="L827" class="LineNr"> 827 </span> 0f 8d/jump-if->= $next-word-string-or-expression-without-metadata:return-eol/disp32
|
||||||
<span id="L828" class="LineNr"> 828 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-comment</span>:
|
<span id="L828" class="LineNr"> 828 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-comment</span>:
|
||||||
<span id="L829" class="LineNr"> 829 </span> <span class="subxComment"># out->start = &line->data[line->read]</span>
|
<span id="L829" class="LineNr"> 829 </span> <span class="subxComment"># out->start = &line->data[line->read]</span>
|
||||||
<span id="L830" class="LineNr"> 830 </span> 8d/copy-address *(esi+ecx+0xc) 0/r32/eax
|
<span id="L830" class="LineNr"> 830 </span> 8d/copy-address *(esi+ecx+0xc) 0/r32/eax
|
||||||
|
@ -825,7 +825,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L835" class="LineNr"> 835 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
<span id="L835" class="LineNr"> 835 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
<span id="L836" class="LineNr"> 836 </span> <span class="subxS1Comment"># . if (eax != '#') goto next check</span>
|
<span id="L836" class="LineNr"> 836 </span> <span class="subxS1Comment"># . if (eax != '#') goto next check</span>
|
||||||
<span id="L837" class="LineNr"> 837 </span> 3d/compare-eax-and 0x23/imm32/pound
|
<span id="L837" class="LineNr"> 837 </span> 3d/compare-eax-and 0x23/imm32/pound
|
||||||
<span id="L838" class="LineNr"> 838 </span> 75/jump-if-not-equal $next-word-string-or-expression-without-metadata:check-for-string-literal/disp8
|
<span id="L838" class="LineNr"> 838 </span> 75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-string-literal/disp8
|
||||||
<span id="L839" class="LineNr"> 839 </span><span class="Constant">$next-word-string-or-expression-without-metadata:comment</span>:
|
<span id="L839" class="LineNr"> 839 </span><span class="Constant">$next-word-string-or-expression-without-metadata:comment</span>:
|
||||||
<span id="L840" class="LineNr"> 840 </span> <span class="subxComment"># out->end = &line->data[line->write]</span>
|
<span id="L840" class="LineNr"> 840 </span> <span class="subxComment"># out->end = &line->data[line->write]</span>
|
||||||
<span id="L841" class="LineNr"> 841 </span> 8b/-> *esi 0/r32/eax
|
<span id="L841" class="LineNr"> 841 </span> 8b/-> *esi 0/r32/eax
|
||||||
|
@ -839,7 +839,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L849" class="LineNr"> 849 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-string-literal</span>:
|
<span id="L849" class="LineNr"> 849 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-string-literal</span>:
|
||||||
<span id="L850" class="LineNr"> 850 </span> <span class="subxComment"># if (line->data[line->read] != '"') goto next check</span>
|
<span id="L850" class="LineNr"> 850 </span> <span class="subxComment"># if (line->data[line->read] != '"') goto next check</span>
|
||||||
<span id="L851" class="LineNr"> 851 </span> 3d/compare-eax-and 0x22/imm32/dquote
|
<span id="L851" class="LineNr"> 851 </span> 3d/compare-eax-and 0x22/imm32/dquote
|
||||||
<span id="L852" class="LineNr"> 852 </span> 75/jump-if-not-equal $next-word-string-or-expression-without-metadata:check-for-expression/disp8
|
<span id="L852" class="LineNr"> 852 </span> 75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-expression/disp8
|
||||||
<span id="L853" class="LineNr"> 853 </span><span class="Constant">$next-word-string-or-expression-without-metadata:string-literal</span>:
|
<span id="L853" class="LineNr"> 853 </span><span class="Constant">$next-word-string-or-expression-without-metadata:string-literal</span>:
|
||||||
<span id="L854" class="LineNr"> 854 </span> <span class="subxComment"># skip-string(line)</span>
|
<span id="L854" class="LineNr"> 854 </span> <span class="subxComment"># skip-string(line)</span>
|
||||||
<span id="L855" class="LineNr"> 855 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L855" class="LineNr"> 855 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -857,14 +857,14 @@ if ('onhashchange' in window) {
|
||||||
<span id="L867" class="LineNr"> 867 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-expression</span>:
|
<span id="L867" class="LineNr"> 867 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-expression</span>:
|
||||||
<span id="L868" class="LineNr"> 868 </span> <span class="subxComment"># if (line->data[line->read] != '*') goto next check</span>
|
<span id="L868" class="LineNr"> 868 </span> <span class="subxComment"># if (line->data[line->read] != '*') goto next check</span>
|
||||||
<span id="L869" class="LineNr"> 869 </span> 3d/compare-eax-and 0x2a/imm32/asterisk
|
<span id="L869" class="LineNr"> 869 </span> 3d/compare-eax-and 0x2a/imm32/asterisk
|
||||||
<span id="L870" class="LineNr"> 870 </span> 75/jump-if-not-equal $next-word-string-or-expression-without-metadata:check-for-end-of-call/disp8
|
<span id="L870" class="LineNr"> 870 </span> 75/jump-if-!= $next-word-string-or-expression-without-metadata:check-for-end-of-call/disp8
|
||||||
<span id="L871" class="LineNr"> 871 </span> <span class="subxComment"># if (line->data[line->read + 1] == ' ') goto error1</span>
|
<span id="L871" class="LineNr"> 871 </span> <span class="subxComment"># if (line->data[line->read + 1] == ' ') goto error1</span>
|
||||||
<span id="L872" class="LineNr"> 872 </span> 8a/copy-byte *(esi+ecx+0xd) 0/r32/AL
|
<span id="L872" class="LineNr"> 872 </span> 8a/copy-byte *(esi+ecx+0xd) 0/r32/AL
|
||||||
<span id="L873" class="LineNr"> 873 </span> 3d/compare-eax-and 0x20/imm32/space
|
<span id="L873" class="LineNr"> 873 </span> 3d/compare-eax-and 0x20/imm32/space
|
||||||
<span id="L874" class="LineNr"> 874 </span> 0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:error1/disp32
|
<span id="L874" class="LineNr"> 874 </span> 0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error1/disp32
|
||||||
<span id="L875" class="LineNr"> 875 </span> <span class="subxComment"># if (line->data[line->read + 1] != '(') goto regular-word</span>
|
<span id="L875" class="LineNr"> 875 </span> <span class="subxComment"># if (line->data[line->read + 1] != '(') goto regular-word</span>
|
||||||
<span id="L876" class="LineNr"> 876 </span> 3d/compare-eax-and 0x28/imm32/open-paren
|
<span id="L876" class="LineNr"> 876 </span> 3d/compare-eax-and 0x28/imm32/open-paren
|
||||||
<span id="L877" class="LineNr"> 877 </span> 0f 85/jump-if-not-equal $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp32
|
<span id="L877" class="LineNr"> 877 </span> 0f 85/jump-if-!= $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp32
|
||||||
<span id="L878" class="LineNr"> 878 </span><span class="Constant">$next-word-string-or-expression-without-metadata:paren</span>:
|
<span id="L878" class="LineNr"> 878 </span><span class="Constant">$next-word-string-or-expression-without-metadata:paren</span>:
|
||||||
<span id="L879" class="LineNr"> 879 </span> <span class="subxComment"># skip-until-close-paren(line)</span>
|
<span id="L879" class="LineNr"> 879 </span> <span class="subxComment"># skip-until-close-paren(line)</span>
|
||||||
<span id="L880" class="LineNr"> 880 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L880" class="LineNr"> 880 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -879,7 +879,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L889" class="LineNr"> 889 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
<span id="L889" class="LineNr"> 889 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
<span id="L890" class="LineNr"> 890 </span> <span class="subxS1Comment"># . if (eax != ')') goto error2</span>
|
<span id="L890" class="LineNr"> 890 </span> <span class="subxS1Comment"># . if (eax != ')') goto error2</span>
|
||||||
<span id="L891" class="LineNr"> 891 </span> 3d/compare-eax-and 0x29/imm32/close-paren
|
<span id="L891" class="LineNr"> 891 </span> 3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
<span id="L892" class="LineNr"> 892 </span> 0f 85/jump-if-not-equal $next-word-string-or-expression-without-metadata:error2/disp32
|
<span id="L892" class="LineNr"> 892 </span> 0f 85/jump-if-!= $next-word-string-or-expression-without-metadata:error2/disp32
|
||||||
<span id="L893" class="LineNr"> 893 </span> <span class="subxComment"># ++line->read to skip ')'</span>
|
<span id="L893" class="LineNr"> 893 </span> <span class="subxComment"># ++line->read to skip ')'</span>
|
||||||
<span id="L894" class="LineNr"> 894 </span> ff 0/subop/increment *(esi+4)
|
<span id="L894" class="LineNr"> 894 </span> ff 0/subop/increment *(esi+4)
|
||||||
<span id="L895" class="LineNr"> 895 </span> <span class="subxComment"># out->end = &line->data[line->read]</span>
|
<span id="L895" class="LineNr"> 895 </span> <span class="subxComment"># out->end = &line->data[line->read]</span>
|
||||||
|
@ -891,7 +891,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L901" class="LineNr"> 901 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-end-of-call</span>:
|
<span id="L901" class="LineNr"> 901 </span><span class="Constant">$next-word-string-or-expression-without-metadata:check-for-end-of-call</span>:
|
||||||
<span id="L902" class="LineNr"> 902 </span> <span class="subxComment"># if (line->data[line->read] != ')') goto next check</span>
|
<span id="L902" class="LineNr"> 902 </span> <span class="subxComment"># if (line->data[line->read] != ')') goto next check</span>
|
||||||
<span id="L903" class="LineNr"> 903 </span> 3d/compare-eax-and 0x29/imm32/close-paren
|
<span id="L903" class="LineNr"> 903 </span> 3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
<span id="L904" class="LineNr"> 904 </span> 75/jump-if-not-equal $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp8
|
<span id="L904" class="LineNr"> 904 </span> 75/jump-if-!= $next-word-string-or-expression-without-metadata:regular-word-without-metadata/disp8
|
||||||
<span id="L905" class="LineNr"> 905 </span> <span class="subxComment"># ++line->read to skip ')'</span>
|
<span id="L905" class="LineNr"> 905 </span> <span class="subxComment"># ++line->read to skip ')'</span>
|
||||||
<span id="L906" class="LineNr"> 906 </span> ff 0/subop/increment *(esi+4)
|
<span id="L906" class="LineNr"> 906 </span> ff 0/subop/increment *(esi+4)
|
||||||
<span id="L907" class="LineNr"> 907 </span> <span class="subxH1Comment"># - error checking: make sure there's nothing else of importance on the line</span>
|
<span id="L907" class="LineNr"> 907 </span> <span class="subxH1Comment"># - error checking: make sure there's nothing else of importance on the line</span>
|
||||||
|
@ -900,13 +900,13 @@ if ('onhashchange' in window) {
|
||||||
<span id="L910" class="LineNr"> 910 </span> 8b/-> *(esi+4) 1/r32/ecx
|
<span id="L910" class="LineNr"> 910 </span> 8b/-> *(esi+4) 1/r32/ecx
|
||||||
<span id="L911" class="LineNr"> 911 </span> <span class="subxS1Comment"># . if (ecx >= line->write) return {0, 0}</span>
|
<span id="L911" class="LineNr"> 911 </span> <span class="subxS1Comment"># . if (ecx >= line->write) return {0, 0}</span>
|
||||||
<span id="L912" class="LineNr"> 912 </span> 3b/compare 1/r32/ecx *esi
|
<span id="L912" class="LineNr"> 912 </span> 3b/compare 1/r32/ecx *esi
|
||||||
<span id="L913" class="LineNr"> 913 </span> 0f 8d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:return-eol/disp32
|
<span id="L913" class="LineNr"> 913 </span> 0f 8d/jump-if->= $next-word-string-or-expression-without-metadata:return-eol/disp32
|
||||||
<span id="L914" class="LineNr"> 914 </span> <span class="subxComment"># if (line->data[line->read] == '/') goto error3</span>
|
<span id="L914" class="LineNr"> 914 </span> <span class="subxComment"># if (line->data[line->read] == '/') goto error3</span>
|
||||||
<span id="L915" class="LineNr"> 915 </span> <span class="subxS1Comment"># . eax = line->data[line->read]</span>
|
<span id="L915" class="LineNr"> 915 </span> <span class="subxS1Comment"># . eax = line->data[line->read]</span>
|
||||||
<span id="L916" class="LineNr"> 916 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
<span id="L916" class="LineNr"> 916 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
<span id="L917" class="LineNr"> 917 </span> <span class="subxS1Comment"># . if (eax == '/') goto error3</span>
|
<span id="L917" class="LineNr"> 917 </span> <span class="subxS1Comment"># . if (eax == '/') goto error3</span>
|
||||||
<span id="L918" class="LineNr"> 918 </span> 3d/compare-eax-and 0x2f/imm32/slash
|
<span id="L918" class="LineNr"> 918 </span> 3d/compare-eax-and 0x2f/imm32/slash
|
||||||
<span id="L919" class="LineNr"> 919 </span> 0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:error3/disp32
|
<span id="L919" class="LineNr"> 919 </span> 0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error3/disp32
|
||||||
<span id="L920" class="LineNr"> 920 </span> <span class="subxComment"># skip-chars-matching-whitespace(line)</span>
|
<span id="L920" class="LineNr"> 920 </span> <span class="subxComment"># skip-chars-matching-whitespace(line)</span>
|
||||||
<span id="L921" class="LineNr"> 921 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L921" class="LineNr"> 921 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L922" class="LineNr"> 922 </span> 56/push-esi
|
<span id="L922" class="LineNr"> 922 </span> 56/push-esi
|
||||||
|
@ -919,14 +919,14 @@ if ('onhashchange' in window) {
|
||||||
<span id="L929" class="LineNr"> 929 </span> 8b/-> *(esi+4) 1/r32/ecx
|
<span id="L929" class="LineNr"> 929 </span> 8b/-> *(esi+4) 1/r32/ecx
|
||||||
<span id="L930" class="LineNr"> 930 </span> <span class="subxS1Comment"># . if (ecx >= line->write) return {0, 0}</span>
|
<span id="L930" class="LineNr"> 930 </span> <span class="subxS1Comment"># . if (ecx >= line->write) return {0, 0}</span>
|
||||||
<span id="L931" class="LineNr"> 931 </span> 3b/compare 1/r32/ecx *esi
|
<span id="L931" class="LineNr"> 931 </span> 3b/compare 1/r32/ecx *esi
|
||||||
<span id="L932" class="LineNr"> 932 </span> 0f 8d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:return-eol/disp32
|
<span id="L932" class="LineNr"> 932 </span> 0f 8d/jump-if->= $next-word-string-or-expression-without-metadata:return-eol/disp32
|
||||||
<span id="L933" class="LineNr"> 933 </span> <span class="subxComment"># if (line->data[line->read] == '#') return out = {0, 0}</span>
|
<span id="L933" class="LineNr"> 933 </span> <span class="subxComment"># if (line->data[line->read] == '#') return out = {0, 0}</span>
|
||||||
<span id="L934" class="LineNr"> 934 </span> <span class="subxS1Comment"># . eax = line->data[line->read]</span>
|
<span id="L934" class="LineNr"> 934 </span> <span class="subxS1Comment"># . eax = line->data[line->read]</span>
|
||||||
<span id="L935" class="LineNr"> 935 </span> 8b/-> *(esi+4) 1/r32/ecx
|
<span id="L935" class="LineNr"> 935 </span> 8b/-> *(esi+4) 1/r32/ecx
|
||||||
<span id="L936" class="LineNr"> 936 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
<span id="L936" class="LineNr"> 936 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
<span id="L937" class="LineNr"> 937 </span> <span class="subxS1Comment"># . if (eax == '#') return out = {0, 0}</span>
|
<span id="L937" class="LineNr"> 937 </span> <span class="subxS1Comment"># . if (eax == '#') return out = {0, 0}</span>
|
||||||
<span id="L938" class="LineNr"> 938 </span> 3d/compare-eax-and 0x23/imm32/pound
|
<span id="L938" class="LineNr"> 938 </span> 3d/compare-eax-and 0x23/imm32/pound
|
||||||
<span id="L939" class="LineNr"> 939 </span> 74/jump-if-equal $next-word-string-or-expression-without-metadata:return-eol/disp8
|
<span id="L939" class="LineNr"> 939 </span> 74/jump-if-= $next-word-string-or-expression-without-metadata:return-eol/disp8
|
||||||
<span id="L940" class="LineNr"> 940 </span> <span class="subxComment"># otherwise goto error4</span>
|
<span id="L940" class="LineNr"> 940 </span> <span class="subxComment"># otherwise goto error4</span>
|
||||||
<span id="L941" class="LineNr"> 941 </span> e9/jump $next-word-string-or-expression-without-metadata:error4/disp32
|
<span id="L941" class="LineNr"> 941 </span> e9/jump $next-word-string-or-expression-without-metadata:error4/disp32
|
||||||
<span id="L942" class="LineNr"> 942 </span><span class="Constant">$next-word-string-or-expression-without-metadata:regular-word-without-metadata</span>:
|
<span id="L942" class="LineNr"> 942 </span><span class="Constant">$next-word-string-or-expression-without-metadata:regular-word-without-metadata</span>:
|
||||||
|
@ -935,20 +935,20 @@ if ('onhashchange' in window) {
|
||||||
<span id="L945" class="LineNr"> 945 </span> 8b/-> *(esi+4) 1/r32/ecx
|
<span id="L945" class="LineNr"> 945 </span> 8b/-> *(esi+4) 1/r32/ecx
|
||||||
<span id="L946" class="LineNr"> 946 </span> <span class="subxS1Comment"># . if (ecx >= line->write) break</span>
|
<span id="L946" class="LineNr"> 946 </span> <span class="subxS1Comment"># . if (ecx >= line->write) break</span>
|
||||||
<span id="L947" class="LineNr"> 947 </span> 3b/compare *esi 1/r32/ecx
|
<span id="L947" class="LineNr"> 947 </span> 3b/compare *esi 1/r32/ecx
|
||||||
<span id="L948" class="LineNr"> 948 </span> 7d/jump-if-greater-or-equal $next-word-string-or-expression-without-metadata:regular-word-break/disp8
|
<span id="L948" class="LineNr"> 948 </span> 7d/jump-if->= $next-word-string-or-expression-without-metadata:regular-word-break/disp8
|
||||||
<span id="L949" class="LineNr"> 949 </span> <span class="subxComment"># if (line->data[line->read] == ' ') break</span>
|
<span id="L949" class="LineNr"> 949 </span> <span class="subxComment"># if (line->data[line->read] == ' ') break</span>
|
||||||
<span id="L950" class="LineNr"> 950 </span> <span class="subxS1Comment"># . eax = line->data[line->read]</span>
|
<span id="L950" class="LineNr"> 950 </span> <span class="subxS1Comment"># . eax = line->data[line->read]</span>
|
||||||
<span id="L951" class="LineNr"> 951 </span> 8b/-> *(esi+4) 1/r32/ecx
|
<span id="L951" class="LineNr"> 951 </span> 8b/-> *(esi+4) 1/r32/ecx
|
||||||
<span id="L952" class="LineNr"> 952 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
<span id="L952" class="LineNr"> 952 </span> 8a/copy-byte *(esi+ecx+0xc) 0/r32/AL
|
||||||
<span id="L953" class="LineNr"> 953 </span> <span class="subxS1Comment"># . if (eax == ' ') break</span>
|
<span id="L953" class="LineNr"> 953 </span> <span class="subxS1Comment"># . if (eax == ' ') break</span>
|
||||||
<span id="L954" class="LineNr"> 954 </span> 3d/compare-eax-and 0x20/imm32/space
|
<span id="L954" class="LineNr"> 954 </span> 3d/compare-eax-and 0x20/imm32/space
|
||||||
<span id="L955" class="LineNr"> 955 </span> 74/jump-if-equal $next-word-string-or-expression-without-metadata:regular-word-break/disp8
|
<span id="L955" class="LineNr"> 955 </span> 74/jump-if-= $next-word-string-or-expression-without-metadata:regular-word-break/disp8
|
||||||
<span id="L956" class="LineNr"> 956 </span> <span class="subxComment"># if (line->data[line->read] == ')') break</span>
|
<span id="L956" class="LineNr"> 956 </span> <span class="subxComment"># if (line->data[line->read] == ')') break</span>
|
||||||
<span id="L957" class="LineNr"> 957 </span> 3d/compare-eax-and 0x29/imm32/close-paren
|
<span id="L957" class="LineNr"> 957 </span> 3d/compare-eax-and 0x29/imm32/close-paren
|
||||||
<span id="L958" class="LineNr"> 958 </span> 0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:regular-word-break/disp32
|
<span id="L958" class="LineNr"> 958 </span> 0f 84/jump-if-= $next-word-string-or-expression-without-metadata:regular-word-break/disp32
|
||||||
<span id="L959" class="LineNr"> 959 </span> <span class="subxComment"># if (line->data[line->read] == '/') goto error5</span>
|
<span id="L959" class="LineNr"> 959 </span> <span class="subxComment"># if (line->data[line->read] == '/') goto error5</span>
|
||||||
<span id="L960" class="LineNr"> 960 </span> 3d/compare-eax-and 0x2f/imm32/slash
|
<span id="L960" class="LineNr"> 960 </span> 3d/compare-eax-and 0x2f/imm32/slash
|
||||||
<span id="L961" class="LineNr"> 961 </span> 0f 84/jump-if-equal $next-word-string-or-expression-without-metadata:error5/disp32
|
<span id="L961" class="LineNr"> 961 </span> 0f 84/jump-if-= $next-word-string-or-expression-without-metadata:error5/disp32
|
||||||
<span id="L962" class="LineNr"> 962 </span> <span class="subxComment"># ++line->read</span>
|
<span id="L962" class="LineNr"> 962 </span> <span class="subxComment"># ++line->read</span>
|
||||||
<span id="L963" class="LineNr"> 963 </span> ff 0/subop/increment *(esi+4)
|
<span id="L963" class="LineNr"> 963 </span> ff 0/subop/increment *(esi+4)
|
||||||
<span id="L964" class="LineNr"> 964 </span> <span class="subxComment"># loop</span>
|
<span id="L964" class="LineNr"> 964 </span> <span class="subxComment"># loop</span>
|
||||||
|
|
|
@ -108,7 +108,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L47" class="LineNr"> 47 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span>
|
<span id="L47" class="LineNr"> 47 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span>
|
||||||
<span id="L48" class="LineNr"> 48 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span>
|
<span id="L48" class="LineNr"> 48 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span>
|
||||||
<span id="L49" class="LineNr"> 49 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span>
|
<span id="L49" class="LineNr"> 49 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span>
|
||||||
<span id="L50" class="LineNr"> 50 </span> 7e/jump-if-lesser-or-equal $run-main/disp8
|
<span id="L50" class="LineNr"> 50 </span> 7e/jump-if-<= $run-main/disp8
|
||||||
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span>
|
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span>
|
||||||
<span id="L52" class="LineNr"> 52 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
<span id="L52" class="LineNr"> 52 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
||||||
<span id="L53" class="LineNr"> 53 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L53" class="LineNr"> 53 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -120,7 +120,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L59" class="LineNr"> 59 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L59" class="LineNr"> 59 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L60" class="LineNr"> 60 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span>
|
<span id="L60" class="LineNr"> 60 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span>
|
||||||
<span id="L61" class="LineNr"> 61 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L61" class="LineNr"> 61 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L62" class="LineNr"> 62 </span> 74/jump-if-equal $run-main/disp8
|
<span id="L62" class="LineNr"> 62 </span> 74/jump-if-= $run-main/disp8
|
||||||
<span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># run-tests()</span>
|
<span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># run-tests()</span>
|
||||||
<span id="L64" class="LineNr"> 64 </span> e8/call run-tests/disp32
|
<span id="L64" class="LineNr"> 64 </span> e8/call run-tests/disp32
|
||||||
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
||||||
|
@ -285,7 +285,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L224" class="LineNr">224 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L224" class="LineNr">224 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L225" class="LineNr">225 </span> <span class="subxS1Comment"># . if (eax == false)</span>
|
<span id="L225" class="LineNr">225 </span> <span class="subxS1Comment"># . if (eax == false)</span>
|
||||||
<span id="L226" class="LineNr">226 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L226" class="LineNr">226 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L227" class="LineNr">227 </span> 75/jump-if-not-equal $get-num:<a href='../mu-init-test.subx.html#L7'>main</a>/disp8
|
<span id="L227" class="LineNr">227 </span> 75/jump-if-!= $get-num:<a href='../mu-init-test.subx.html#L7'>main</a>/disp8
|
||||||
<span id="L228" class="LineNr">228 </span> <span class="subxS1Comment"># . expected(ed, err, "integer")</span>
|
<span id="L228" class="LineNr">228 </span> <span class="subxS1Comment"># . expected(ed, err, "integer")</span>
|
||||||
<span id="L229" class="LineNr">229 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L229" class="LineNr">229 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L230" class="LineNr">230 </span> 68/push <span class="Constant">"integer"</span>/imm32
|
<span id="L230" class="LineNr">230 </span> 68/push <span class="Constant">"integer"</span>/imm32
|
||||||
|
@ -316,7 +316,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L255" class="LineNr">255 </span><span class="Constant">$get-num:loop</span>:
|
<span id="L255" class="LineNr">255 </span><span class="Constant">$get-num:loop</span>:
|
||||||
<span id="L256" class="LineNr">256 </span> <span class="subxComment"># if (out->write >= out->length) error</span>
|
<span id="L256" class="LineNr">256 </span> <span class="subxComment"># if (out->write >= out->length) error</span>
|
||||||
<span id="L257" class="LineNr">257 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with ecx</span>
|
<span id="L257" class="LineNr">257 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with ecx</span>
|
||||||
<span id="L258" class="LineNr">258 </span> 7d/jump-if-lesser $get-num:stage2/disp8
|
<span id="L258" class="LineNr">258 </span> 7d/jump-if-< $get-num:stage2/disp8
|
||||||
<span id="L259" class="LineNr">259 </span> <span class="subxS1Comment"># . error(ed, err, msg) # TODO: show full number</span>
|
<span id="L259" class="LineNr">259 </span> <span class="subxS1Comment"># . error(ed, err, msg) # TODO: show full number</span>
|
||||||
<span id="L260" class="LineNr">260 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L260" class="LineNr">260 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L261" class="LineNr">261 </span> 68/push <span class="Constant">"get-num: too many digits in number"</span>/imm32
|
<span id="L261" class="LineNr">261 </span> 68/push <span class="Constant">"get-num: too many digits in number"</span>/imm32
|
||||||
|
@ -604,10 +604,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L543" class="LineNr">543 </span> b8/copy-to-eax 0/imm32
|
<span id="L543" class="LineNr">543 </span> b8/copy-to-eax 0/imm32
|
||||||
<span id="L544" class="LineNr">544 </span> <span class="subxComment"># if (c < '0') return false</span>
|
<span id="L544" class="LineNr">544 </span> <span class="subxComment"># if (c < '0') return false</span>
|
||||||
<span id="L545" class="LineNr">545 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x30/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
<span id="L545" class="LineNr">545 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x30/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
||||||
<span id="L546" class="LineNr">546 </span> 7c/jump-if-lesser $is-digit?:end/disp8
|
<span id="L546" class="LineNr">546 </span> 7c/jump-if-< $is-digit?:end/disp8
|
||||||
<span id="L547" class="LineNr">547 </span> <span class="subxComment"># if (c > '9') return false</span>
|
<span id="L547" class="LineNr">547 </span> <span class="subxComment"># if (c > '9') return false</span>
|
||||||
<span id="L548" class="LineNr">548 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x39/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
<span id="L548" class="LineNr">548 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x39/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
||||||
<span id="L549" class="LineNr">549 </span> 7f/jump-if-greater $is-digit?:end/disp8
|
<span id="L549" class="LineNr">549 </span> 7f/jump-if-> $is-digit?:end/disp8
|
||||||
<span id="L550" class="LineNr">550 </span> <span class="subxComment"># otherwise return true</span>
|
<span id="L550" class="LineNr">550 </span> <span class="subxComment"># otherwise return true</span>
|
||||||
<span id="L551" class="LineNr">551 </span> b8/copy-to-eax 1/imm32
|
<span id="L551" class="LineNr">551 </span> b8/copy-to-eax 1/imm32
|
||||||
<span id="L552" class="LineNr">552 </span><span class="Constant">$is-digit?:end</span>:
|
<span id="L552" class="LineNr">552 </span><span class="Constant">$is-digit?:end</span>:
|
||||||
|
|
|
@ -108,7 +108,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L47" class="LineNr"> 47 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span>
|
<span id="L47" class="LineNr"> 47 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run_tests()</span>
|
||||||
<span id="L48" class="LineNr"> 48 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span>
|
<span id="L48" class="LineNr"> 48 </span> <span class="subxComment"># if (argc <= 1) goto run-main</span>
|
||||||
<span id="L49" class="LineNr"> 49 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span>
|
<span id="L49" class="LineNr"> 49 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span>
|
||||||
<span id="L50" class="LineNr"> 50 </span> 7e/jump-if-lesser-or-equal $run-main/disp8
|
<span id="L50" class="LineNr"> 50 </span> 7e/jump-if-<= $run-main/disp8
|
||||||
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span>
|
<span id="L51" class="LineNr"> 51 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto run-main</span>
|
||||||
<span id="L52" class="LineNr"> 52 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
<span id="L52" class="LineNr"> 52 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
||||||
<span id="L53" class="LineNr"> 53 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L53" class="LineNr"> 53 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -120,7 +120,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L59" class="LineNr"> 59 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L59" class="LineNr"> 59 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L60" class="LineNr"> 60 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span>
|
<span id="L60" class="LineNr"> 60 </span> <span class="subxS1Comment"># . if (eax == false) goto run-main</span>
|
||||||
<span id="L61" class="LineNr"> 61 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L61" class="LineNr"> 61 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L62" class="LineNr"> 62 </span> 74/jump-if-equal $run-main/disp8
|
<span id="L62" class="LineNr"> 62 </span> 74/jump-if-= $run-main/disp8
|
||||||
<span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># run-tests()</span>
|
<span id="L63" class="LineNr"> 63 </span> <span class="subxComment"># run-tests()</span>
|
||||||
<span id="L64" class="LineNr"> 64 </span> e8/call run-tests/disp32
|
<span id="L64" class="LineNr"> 64 </span> e8/call run-tests/disp32
|
||||||
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
<span id="L65" class="LineNr"> 65 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
||||||
|
@ -290,7 +290,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L229" class="LineNr">229 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L229" class="LineNr">229 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L230" class="LineNr">230 </span> <span class="subxS1Comment"># . if (eax == false)</span>
|
<span id="L230" class="LineNr">230 </span> <span class="subxS1Comment"># . if (eax == false)</span>
|
||||||
<span id="L231" class="LineNr">231 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L231" class="LineNr">231 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L232" class="LineNr">232 </span> 75/jump-if-not-equal $get-num:<a href='../mu-init-test.subx.html#L7'>main</a>/disp8
|
<span id="L232" class="LineNr">232 </span> 75/jump-if-!= $get-num:<a href='../mu-init-test.subx.html#L7'>main</a>/disp8
|
||||||
<span id="L233" class="LineNr">233 </span> <span class="subxS1Comment"># . expected(ed, err, "integer")</span>
|
<span id="L233" class="LineNr">233 </span> <span class="subxS1Comment"># . expected(ed, err, "integer")</span>
|
||||||
<span id="L234" class="LineNr">234 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L234" class="LineNr">234 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L235" class="LineNr">235 </span> 68/push <span class="Constant">"integer"</span>/imm32
|
<span id="L235" class="LineNr">235 </span> 68/push <span class="Constant">"integer"</span>/imm32
|
||||||
|
@ -321,7 +321,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L260" class="LineNr">260 </span><span class="Constant">$get-num:loop</span>:
|
<span id="L260" class="LineNr">260 </span><span class="Constant">$get-num:loop</span>:
|
||||||
<span id="L261" class="LineNr">261 </span> <span class="subxComment"># if (out->write >= out->length) error</span>
|
<span id="L261" class="LineNr">261 </span> <span class="subxComment"># if (out->write >= out->length) error</span>
|
||||||
<span id="L262" class="LineNr">262 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with ecx</span>
|
<span id="L262" class="LineNr">262 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with ecx</span>
|
||||||
<span id="L263" class="LineNr">263 </span> 7d/jump-if-lesser $get-num:loop-stage2/disp8
|
<span id="L263" class="LineNr">263 </span> 7d/jump-if-< $get-num:loop-stage2/disp8
|
||||||
<span id="L264" class="LineNr">264 </span> <span class="subxS1Comment"># . error(ed, err, msg) # TODO: show full number</span>
|
<span id="L264" class="LineNr">264 </span> <span class="subxS1Comment"># . error(ed, err, msg) # TODO: show full number</span>
|
||||||
<span id="L265" class="LineNr">265 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L265" class="LineNr">265 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L266" class="LineNr">266 </span> 68/push <span class="Constant">"get-num: too many digits in number"</span>/imm32
|
<span id="L266" class="LineNr">266 </span> 68/push <span class="Constant">"get-num: too many digits in number"</span>/imm32
|
||||||
|
@ -355,7 +355,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L294" class="LineNr">294 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L294" class="LineNr">294 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L295" class="LineNr">295 </span> <span class="subxS1Comment"># . if (eax != false) loop</span>
|
<span id="L295" class="LineNr">295 </span> <span class="subxS1Comment"># . if (eax != false) loop</span>
|
||||||
<span id="L296" class="LineNr">296 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L296" class="LineNr">296 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L297" class="LineNr">297 </span> 0f 85/jump-if-not-equal $get-num:<span class="Constant">loop</span>/disp32
|
<span id="L297" class="LineNr">297 </span> 0f 85/jump-if-!= $get-num:<span class="Constant">loop</span>/disp32
|
||||||
<span id="L298" class="LineNr">298 </span><span class="Constant">$get-num:loop-end</span>:
|
<span id="L298" class="LineNr">298 </span><span class="Constant">$get-num:loop-end</span>:
|
||||||
<span id="L299" class="LineNr">299 </span> <span class="subxComment"># persist necessary variables from registers</span>
|
<span id="L299" class="LineNr">299 </span> <span class="subxComment"># persist necessary variables from registers</span>
|
||||||
<span id="L300" class="LineNr">300 </span> 89/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *edi</span>
|
<span id="L300" class="LineNr">300 </span> 89/copy 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy ecx to *edi</span>
|
||||||
|
@ -798,10 +798,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L737" class="LineNr">737 </span> b8/copy-to-eax 0/imm32
|
<span id="L737" class="LineNr">737 </span> b8/copy-to-eax 0/imm32
|
||||||
<span id="L738" class="LineNr">738 </span> <span class="subxComment"># if (c < '0') return false</span>
|
<span id="L738" class="LineNr">738 </span> <span class="subxComment"># if (c < '0') return false</span>
|
||||||
<span id="L739" class="LineNr">739 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x30/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
<span id="L739" class="LineNr">739 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x30/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
||||||
<span id="L740" class="LineNr">740 </span> 7c/jump-if-lesser $is-digit?:end/disp8
|
<span id="L740" class="LineNr">740 </span> 7c/jump-if-< $is-digit?:end/disp8
|
||||||
<span id="L741" class="LineNr">741 </span> <span class="subxComment"># if (c > '9') return false</span>
|
<span id="L741" class="LineNr">741 </span> <span class="subxComment"># if (c > '9') return false</span>
|
||||||
<span id="L742" class="LineNr">742 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x39/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
<span id="L742" class="LineNr">742 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/disp8 0x39/imm32 <span class="subxComment"># compare *(ebp+8)</span>
|
||||||
<span id="L743" class="LineNr">743 </span> 7f/jump-if-greater $is-digit?:end/disp8
|
<span id="L743" class="LineNr">743 </span> 7f/jump-if-> $is-digit?:end/disp8
|
||||||
<span id="L744" class="LineNr">744 </span> <span class="subxComment"># otherwise return true</span>
|
<span id="L744" class="LineNr">744 </span> <span class="subxComment"># otherwise return true</span>
|
||||||
<span id="L745" class="LineNr">745 </span> b8/copy-to-eax 1/imm32
|
<span id="L745" class="LineNr">745 </span> b8/copy-to-eax 1/imm32
|
||||||
<span id="L746" class="LineNr">746 </span><span class="Constant">$is-digit?:end</span>:
|
<span id="L746" class="LineNr">746 </span><span class="Constant">$is-digit?:end</span>:
|
||||||
|
|
|
@ -99,7 +99,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L36" class="LineNr"> 36 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run-tests()</span>
|
<span id="L36" class="LineNr"> 36 </span> <span class="subxH1Comment"># - if argc > 1 and argv[1] == "test", then return run-tests()</span>
|
||||||
<span id="L37" class="LineNr"> 37 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span>
|
<span id="L37" class="LineNr"> 37 </span> <span class="subxComment"># if (argc <= 1) goto interactive</span>
|
||||||
<span id="L38" class="LineNr"> 38 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span>
|
<span id="L38" class="LineNr"> 38 </span> 81 7/subop/compare 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/disp8 1/imm32 <span class="subxComment"># compare *ebp</span>
|
||||||
<span id="L39" class="LineNr"> 39 </span> 7e/jump-if-lesser-or-equal $subx-dquotes-main:interactive/disp8
|
<span id="L39" class="LineNr"> 39 </span> 7e/jump-if-<= $subx-dquotes-main:interactive/disp8
|
||||||
<span id="L40" class="LineNr"> 40 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span>
|
<span id="L40" class="LineNr"> 40 </span> <span class="subxComment"># if (!kernel-string-equal?(argv[1], "test")) goto interactive</span>
|
||||||
<span id="L41" class="LineNr"> 41 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
<span id="L41" class="LineNr"> 41 </span> <span class="subxS1Comment"># . eax = kernel-string-equal?(argv[1], "test")</span>
|
||||||
<span id="L42" class="LineNr"> 42 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L42" class="LineNr"> 42 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -111,7 +111,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L48" class="LineNr"> 48 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L48" class="LineNr"> 48 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 8/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L49" class="LineNr"> 49 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span>
|
<span id="L49" class="LineNr"> 49 </span> <span class="subxS1Comment"># . if (eax == false) goto interactive</span>
|
||||||
<span id="L50" class="LineNr"> 50 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L50" class="LineNr"> 50 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L51" class="LineNr"> 51 </span> 74/jump-if-equal $subx-dquotes-main:interactive/disp8
|
<span id="L51" class="LineNr"> 51 </span> 74/jump-if-= $subx-dquotes-main:interactive/disp8
|
||||||
<span id="L52" class="LineNr"> 52 </span> <span class="subxComment"># run-tests()</span>
|
<span id="L52" class="LineNr"> 52 </span> <span class="subxComment"># run-tests()</span>
|
||||||
<span id="L53" class="LineNr"> 53 </span> e8/call run-tests/disp32
|
<span id="L53" class="LineNr"> 53 </span> e8/call run-tests/disp32
|
||||||
<span id="L54" class="LineNr"> 54 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
<span id="L54" class="LineNr"> 54 </span> <span class="subxComment"># syscall(exit, *Num-test-failures)</span>
|
||||||
|
@ -237,7 +237,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L174" class="LineNr"> 174 </span><span class="Constant">$subx-dquotes:check0</span>:
|
<span id="L174" class="LineNr"> 174 </span><span class="Constant">$subx-dquotes:check0</span>:
|
||||||
<span id="L175" class="LineNr"> 175 </span> <span class="subxComment"># if (line->write == 0) break</span>
|
<span id="L175" class="LineNr"> 175 </span> <span class="subxComment"># if (line->write == 0) break</span>
|
||||||
<span id="L176" class="LineNr"> 176 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span>
|
<span id="L176" class="LineNr"> 176 </span> 81 7/subop/compare 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare *ecx</span>
|
||||||
<span id="L177" class="LineNr"> 177 </span> 0f 84/jump-if-equal $subx-dquotes:<span class="Constant">break</span>/disp32
|
<span id="L177" class="LineNr"> 177 </span> 0f 84/jump-if-= $subx-dquotes:<span class="Constant">break</span>/disp32
|
||||||
<span id="L178" class="LineNr"> 178 </span><span class="Constant">$subx-dquotes:word-loop</span>:
|
<span id="L178" class="LineNr"> 178 </span><span class="Constant">$subx-dquotes:word-loop</span>:
|
||||||
<span id="L179" class="LineNr"> 179 </span> <span class="subxComment"># next-word-or-string(line, word-slice)</span>
|
<span id="L179" class="LineNr"> 179 </span> <span class="subxComment"># next-word-or-string(line, word-slice)</span>
|
||||||
<span id="L180" class="LineNr"> 180 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L180" class="LineNr"> 180 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -258,7 +258,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L195" class="LineNr"> 195 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L195" class="LineNr"> 195 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L196" class="LineNr"> 196 </span> <span class="subxS1Comment"># . if (eax != false) break</span>
|
<span id="L196" class="LineNr"> 196 </span> <span class="subxS1Comment"># . if (eax != false) break</span>
|
||||||
<span id="L197" class="LineNr"> 197 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L197" class="LineNr"> 197 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L198" class="LineNr"> 198 </span> 0f 85/jump-if-not-equal $subx-dquotes:next-line/disp32
|
<span id="L198" class="LineNr"> 198 </span> 0f 85/jump-if-!= $subx-dquotes:next-line/disp32
|
||||||
<span id="L199" class="LineNr"> 199 </span><span class="Constant">$subx-dquotes:check-for-comment</span>:
|
<span id="L199" class="LineNr"> 199 </span><span class="Constant">$subx-dquotes:check-for-comment</span>:
|
||||||
<span id="L200" class="LineNr"> 200 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span>
|
<span id="L200" class="LineNr"> 200 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, "#")) continue</span>
|
||||||
<span id="L201" class="LineNr"> 201 </span> <span class="subxS1Comment"># . var start/esi : (addr byte) = word-slice->start</span>
|
<span id="L201" class="LineNr"> 201 </span> <span class="subxS1Comment"># . var start/esi : (addr byte) = word-slice->start</span>
|
||||||
|
@ -268,11 +268,11 @@ if ('onhashchange' in window) {
|
||||||
<span id="L205" class="LineNr"> 205 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
<span id="L205" class="LineNr"> 205 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to AL</span>
|
||||||
<span id="L206" class="LineNr"> 206 </span> <span class="subxS1Comment"># . if (c == '#') continue</span>
|
<span id="L206" class="LineNr"> 206 </span> <span class="subxS1Comment"># . if (c == '#') continue</span>
|
||||||
<span id="L207" class="LineNr"> 207 </span> 3d/compare-eax-and 0x23/imm32/hash
|
<span id="L207" class="LineNr"> 207 </span> 3d/compare-eax-and 0x23/imm32/hash
|
||||||
<span id="L208" class="LineNr"> 208 </span> 74/jump-if-equal $subx-dquotes:word-loop/disp8
|
<span id="L208" class="LineNr"> 208 </span> 74/jump-if-= $subx-dquotes:word-loop/disp8
|
||||||
<span id="L209" class="LineNr"> 209 </span><span class="Constant">$subx-dquotes:check-for-string-literal</span>:
|
<span id="L209" class="LineNr"> 209 </span><span class="Constant">$subx-dquotes:check-for-string-literal</span>:
|
||||||
<span id="L210" class="LineNr"> 210 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, '"')) continue</span>
|
<span id="L210" class="LineNr"> 210 </span> <span class="subxComment"># if (slice-starts-with?(word-slice, '"')) continue</span>
|
||||||
<span id="L211" class="LineNr"> 211 </span> 3d/compare-eax-and 0x22/imm32/dquote
|
<span id="L211" class="LineNr"> 211 </span> 3d/compare-eax-and 0x22/imm32/dquote
|
||||||
<span id="L212" class="LineNr"> 212 </span> 75/jump-if-not-equal $subx-dquotes:regular-word/disp8
|
<span id="L212" class="LineNr"> 212 </span> 75/jump-if-!= $subx-dquotes:regular-word/disp8
|
||||||
<span id="L213" class="LineNr"> 213 </span><span class="Constant">$subx-dquotes:string-literal</span>:
|
<span id="L213" class="LineNr"> 213 </span><span class="Constant">$subx-dquotes:string-literal</span>:
|
||||||
<span id="L214" class="LineNr"> 214 </span> <span class="subxComment"># process-string-literal(word-slice, out, new-data-segment)</span>
|
<span id="L214" class="LineNr"> 214 </span> <span class="subxComment"># process-string-literal(word-slice, out, new-data-segment)</span>
|
||||||
<span id="L215" class="LineNr"> 215 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L215" class="LineNr"> 215 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -931,25 +931,25 @@ if ('onhashchange' in window) {
|
||||||
<span id="L925" class="LineNr"> 925 </span><span class="Constant">$emit-string-literal-data:loop</span>:
|
<span id="L925" class="LineNr"> 925 </span><span class="Constant">$emit-string-literal-data:loop</span>:
|
||||||
<span id="L926" class="LineNr"> 926 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L926" class="LineNr"> 926 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L927" class="LineNr"> 927 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with esi</span>
|
<span id="L927" class="LineNr"> 927 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with esi</span>
|
||||||
<span id="L928" class="LineNr"> 928 </span> 0f 83/jump-if-greater-or-equal-unsigned $emit-string-literal-data:end/disp32
|
<span id="L928" class="LineNr"> 928 </span> 0f 83/jump-if-addr>= $emit-string-literal-data:end/disp32
|
||||||
<span id="L929" class="LineNr"> 929 </span> <span class="subxComment"># CL = *curr</span>
|
<span id="L929" class="LineNr"> 929 </span> <span class="subxComment"># CL = *curr</span>
|
||||||
<span id="L930" class="LineNr"> 930 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span>
|
<span id="L930" class="LineNr"> 930 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span>
|
||||||
<span id="L931" class="LineNr"> 931 </span> <span class="subxComment"># if (c == '"') break</span>
|
<span id="L931" class="LineNr"> 931 </span> <span class="subxComment"># if (c == '"') break</span>
|
||||||
<span id="L932" class="LineNr"> 932 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x22/imm32/dquote <span class="subxComment"># compare ecx</span>
|
<span id="L932" class="LineNr"> 932 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x22/imm32/dquote <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L933" class="LineNr"> 933 </span> 0f 84/jump-if-equal $emit-string-literal-data:end/disp32
|
<span id="L933" class="LineNr"> 933 </span> 0f 84/jump-if-= $emit-string-literal-data:end/disp32
|
||||||
<span id="L934" class="LineNr"> 934 </span> <span class="subxComment"># if (c != '\') goto emit</span>
|
<span id="L934" class="LineNr"> 934 </span> <span class="subxComment"># if (c != '\') goto emit</span>
|
||||||
<span id="L935" class="LineNr"> 935 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x5c/imm32/backslash <span class="subxComment"># compare ecx</span>
|
<span id="L935" class="LineNr"> 935 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x5c/imm32/backslash <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L936" class="LineNr"> 936 </span> 75/jump-if-not-equal $emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a>/disp8
|
<span id="L936" class="LineNr"> 936 </span> 75/jump-if-!= $emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a>/disp8
|
||||||
<span id="L937" class="LineNr"> 937 </span> <span class="subxComment"># ++curr</span>
|
<span id="L937" class="LineNr"> 937 </span> <span class="subxComment"># ++curr</span>
|
||||||
<span id="L938" class="LineNr"> 938 </span> 42/increment-edx
|
<span id="L938" class="LineNr"> 938 </span> 42/increment-edx
|
||||||
<span id="L939" class="LineNr"> 939 </span> <span class="subxComment"># if (curr >= max) break</span>
|
<span id="L939" class="LineNr"> 939 </span> <span class="subxComment"># if (curr >= max) break</span>
|
||||||
<span id="L940" class="LineNr"> 940 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with esi</span>
|
<span id="L940" class="LineNr"> 940 </span> 39/compare 3/mod/direct 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 6/r32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare edx with esi</span>
|
||||||
<span id="L941" class="LineNr"> 941 </span> 0f 83/jump-if-greater-or-equal-unsigned $emit-string-literal-data:end/disp32
|
<span id="L941" class="LineNr"> 941 </span> 0f 83/jump-if-addr>= $emit-string-literal-data:end/disp32
|
||||||
<span id="L942" class="LineNr"> 942 </span> <span class="subxComment"># c = *curr</span>
|
<span id="L942" class="LineNr"> 942 </span> <span class="subxComment"># c = *curr</span>
|
||||||
<span id="L943" class="LineNr"> 943 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span>
|
<span id="L943" class="LineNr"> 943 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span>
|
||||||
<span id="L944" class="LineNr"> 944 </span> <span class="subxComment"># if (c == 'n') c = newline</span>
|
<span id="L944" class="LineNr"> 944 </span> <span class="subxComment"># if (c == 'n') c = newline</span>
|
||||||
<span id="L945" class="LineNr"> 945 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x6e/imm32/n <span class="subxComment"># compare ecx</span>
|
<span id="L945" class="LineNr"> 945 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x6e/imm32/n <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L946" class="LineNr"> 946 </span> 75/jump-if-not-equal $emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a>/disp8
|
<span id="L946" class="LineNr"> 946 </span> 75/jump-if-!= $emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a>/disp8
|
||||||
<span id="L947" class="LineNr"> 947 </span> b9/copy-to-ecx 0x0a/imm32/newline
|
<span id="L947" class="LineNr"> 947 </span> b9/copy-to-ecx 0x0a/imm32/newline
|
||||||
<span id="L948" class="LineNr"> 948 </span><span class="Constant">$emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a></span>:
|
<span id="L948" class="LineNr"> 948 </span><span class="Constant">$emit-string-literal-data:<a href='../079emit.subx.html#L10'>emit</a></span>:
|
||||||
<span id="L949" class="LineNr"> 949 </span> <span class="subxComment"># append-byte-hex(out, CL)</span>
|
<span id="L949" class="LineNr"> 949 </span> <span class="subxComment"># append-byte-hex(out, CL)</span>
|
||||||
|
@ -970,7 +970,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L964" class="LineNr"> 964 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
<span id="L964" class="LineNr"> 964 </span> 81 0/subop/add 3/mod/direct 4/rm32/esp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 4/imm32 <span class="subxComment"># add to esp</span>
|
||||||
<span id="L965" class="LineNr"> 965 </span> <span class="subxS1Comment"># . if (eax == false) goto char-done</span>
|
<span id="L965" class="LineNr"> 965 </span> <span class="subxS1Comment"># . if (eax == false) goto char-done</span>
|
||||||
<span id="L966" class="LineNr"> 966 </span> 3d/compare-eax-and 0/imm32/false
|
<span id="L966" class="LineNr"> 966 </span> 3d/compare-eax-and 0/imm32/false
|
||||||
<span id="L967" class="LineNr"> 967 </span> 74/jump-if-equal $emit-string-literal-data:char-done/disp8
|
<span id="L967" class="LineNr"> 967 </span> 74/jump-if-= $emit-string-literal-data:char-done/disp8
|
||||||
<span id="L968" class="LineNr"> 968 </span> <span class="subxS1Comment"># . write(out, "/")</span>
|
<span id="L968" class="LineNr"> 968 </span> <span class="subxS1Comment"># . write(out, "/")</span>
|
||||||
<span id="L969" class="LineNr"> 969 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L969" class="LineNr"> 969 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
<span id="L970" class="LineNr"> 970 </span> 68/push <span class="SpecialChar"><a href='../051test.subx.html#L101'>Slash</a></span>/imm32
|
<span id="L970" class="LineNr"> 970 </span> 68/push <span class="SpecialChar"><a href='../051test.subx.html#L101'>Slash</a></span>/imm32
|
||||||
|
@ -1002,7 +1002,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L996" class="LineNr"> 996 </span> 43/increment-ebx
|
<span id="L996" class="LineNr"> 996 </span> 43/increment-ebx
|
||||||
<span id="L997" class="LineNr"> 997 </span> <span class="subxComment"># if (idx < 0x40) continue</span>
|
<span id="L997" class="LineNr"> 997 </span> <span class="subxComment"># if (idx < 0x40) continue</span>
|
||||||
<span id="L998" class="LineNr"> 998 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x40/imm32 <span class="subxComment"># compare ebx</span>
|
<span id="L998" class="LineNr"> 998 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x40/imm32 <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L999" class="LineNr"> 999 </span> 7c/jump-if-lesser $emit-string-literal-data:next-char/disp8
|
<span id="L999" class="LineNr"> 999 </span> 7c/jump-if-< $emit-string-literal-data:next-char/disp8
|
||||||
<span id="L1000" class="LineNr">1000 </span> <span class="subxComment"># idx = 0</span>
|
<span id="L1000" class="LineNr">1000 </span> <span class="subxComment"># idx = 0</span>
|
||||||
<span id="L1001" class="LineNr">1001 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
<span id="L1001" class="LineNr">1001 </span> 31/xor 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># clear ebx</span>
|
||||||
<span id="L1002" class="LineNr">1002 </span> <span class="subxComment"># write(out, "\n")</span>
|
<span id="L1002" class="LineNr">1002 </span> <span class="subxComment"># write(out, "\n")</span>
|
||||||
|
@ -1035,22 +1035,22 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1029" class="LineNr">1029 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to eax</span>
|
<span id="L1029" class="LineNr">1029 </span> 8b/copy 1/mod/*+disp8 5/rm32/ebp <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/eax 8/disp8 <span class="Normal"> . </span> <span class="subxComment"># copy *(ebp+8) to eax</span>
|
||||||
<span id="L1030" class="LineNr">1030 </span> <span class="subxComment"># if (c < '0') return false</span>
|
<span id="L1030" class="LineNr">1030 </span> <span class="subxComment"># if (c < '0') return false</span>
|
||||||
<span id="L1031" class="LineNr">1031 </span> 3d/compare-eax-with 0x30/imm32/0
|
<span id="L1031" class="LineNr">1031 </span> 3d/compare-eax-with 0x30/imm32/0
|
||||||
<span id="L1032" class="LineNr">1032 </span> 7c/jump-if-lesser $is-alphanumeric?:false/disp8
|
<span id="L1032" class="LineNr">1032 </span> 7c/jump-if-< $is-alphanumeric?:false/disp8
|
||||||
<span id="L1033" class="LineNr">1033 </span> <span class="subxComment"># if (c <= '9') return true</span>
|
<span id="L1033" class="LineNr">1033 </span> <span class="subxComment"># if (c <= '9') return true</span>
|
||||||
<span id="L1034" class="LineNr">1034 </span> 3d/compare-eax-with 0x39/imm32/9
|
<span id="L1034" class="LineNr">1034 </span> 3d/compare-eax-with 0x39/imm32/9
|
||||||
<span id="L1035" class="LineNr">1035 </span> 7e/jump-if-lesser-or-equal $is-alphanumeric?:true/disp8
|
<span id="L1035" class="LineNr">1035 </span> 7e/jump-if-<= $is-alphanumeric?:true/disp8
|
||||||
<span id="L1036" class="LineNr">1036 </span> <span class="subxComment"># if (c < 'A') return false</span>
|
<span id="L1036" class="LineNr">1036 </span> <span class="subxComment"># if (c < 'A') return false</span>
|
||||||
<span id="L1037" class="LineNr">1037 </span> 3d/compare-eax-with 0x41/imm32/A
|
<span id="L1037" class="LineNr">1037 </span> 3d/compare-eax-with 0x41/imm32/A
|
||||||
<span id="L1038" class="LineNr">1038 </span> 7c/jump-if-lesser $is-alphanumeric?:false/disp8
|
<span id="L1038" class="LineNr">1038 </span> 7c/jump-if-< $is-alphanumeric?:false/disp8
|
||||||
<span id="L1039" class="LineNr">1039 </span> <span class="subxComment"># if (c <= 'Z') return true</span>
|
<span id="L1039" class="LineNr">1039 </span> <span class="subxComment"># if (c <= 'Z') return true</span>
|
||||||
<span id="L1040" class="LineNr">1040 </span> 3d/compare-eax-with 0x5a/imm32/Z
|
<span id="L1040" class="LineNr">1040 </span> 3d/compare-eax-with 0x5a/imm32/Z
|
||||||
<span id="L1041" class="LineNr">1041 </span> 7e/jump-if-lesser-or-equal $is-alphanumeric?:true/disp8
|
<span id="L1041" class="LineNr">1041 </span> 7e/jump-if-<= $is-alphanumeric?:true/disp8
|
||||||
<span id="L1042" class="LineNr">1042 </span> <span class="subxComment"># if (c < 'a') return false</span>
|
<span id="L1042" class="LineNr">1042 </span> <span class="subxComment"># if (c < 'a') return false</span>
|
||||||
<span id="L1043" class="LineNr">1043 </span> 3d/compare-eax-with 0x61/imm32/a
|
<span id="L1043" class="LineNr">1043 </span> 3d/compare-eax-with 0x61/imm32/a
|
||||||
<span id="L1044" class="LineNr">1044 </span> 7c/jump-if-lesser $is-alphanumeric?:false/disp8
|
<span id="L1044" class="LineNr">1044 </span> 7c/jump-if-< $is-alphanumeric?:false/disp8
|
||||||
<span id="L1045" class="LineNr">1045 </span> <span class="subxComment"># if (c <= 'z') return true</span>
|
<span id="L1045" class="LineNr">1045 </span> <span class="subxComment"># if (c <= 'z') return true</span>
|
||||||
<span id="L1046" class="LineNr">1046 </span> 3d/compare-eax-with 0x7a/imm32/z
|
<span id="L1046" class="LineNr">1046 </span> 3d/compare-eax-with 0x7a/imm32/z
|
||||||
<span id="L1047" class="LineNr">1047 </span> 7e/jump-if-lesser-or-equal $is-alphanumeric?:true/disp8
|
<span id="L1047" class="LineNr">1047 </span> 7e/jump-if-<= $is-alphanumeric?:true/disp8
|
||||||
<span id="L1048" class="LineNr">1048 </span> <span class="subxComment"># return false</span>
|
<span id="L1048" class="LineNr">1048 </span> <span class="subxComment"># return false</span>
|
||||||
<span id="L1049" class="LineNr">1049 </span><span class="Constant">$is-alphanumeric?:false</span>:
|
<span id="L1049" class="LineNr">1049 </span><span class="Constant">$is-alphanumeric?:false</span>:
|
||||||
<span id="L1050" class="LineNr">1050 </span> b8/copy-to-eax 0/imm32/false
|
<span id="L1050" class="LineNr">1050 </span> b8/copy-to-eax 0/imm32/false
|
||||||
|
@ -1301,7 +1301,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1420" class="LineNr">1420 </span> <span class="subxH1Comment"># - if (*curr == '"') curr = skip-string-in-slice(curr, end)</span>
|
<span id="L1420" class="LineNr">1420 </span> <span class="subxH1Comment"># - if (*curr == '"') curr = skip-string-in-slice(curr, end)</span>
|
||||||
<span id="L1421" class="LineNr">1421 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L1421" class="LineNr">1421 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
<span id="L1422" class="LineNr">1422 </span> 3d/compare-eax-and 0x22/imm32/dquote
|
<span id="L1422" class="LineNr">1422 </span> 3d/compare-eax-and 0x22/imm32/dquote
|
||||||
<span id="L1423" class="LineNr">1423 </span> 75/jump-if-not-equal $emit-metadata:skip-datum-loop/disp8
|
<span id="L1423" class="LineNr">1423 </span> 75/jump-if-!= $emit-metadata:skip-datum-loop/disp8
|
||||||
<span id="L1424" class="LineNr">1424 </span><span class="Constant">$emit-metadata:skip-string-literal</span>:
|
<span id="L1424" class="LineNr">1424 </span><span class="Constant">$emit-metadata:skip-string-literal</span>:
|
||||||
<span id="L1425" class="LineNr">1425 </span> <span class="subxS1Comment"># . eax = skip-string-in-slice(curr, end)</span>
|
<span id="L1425" class="LineNr">1425 </span> <span class="subxS1Comment"># . eax = skip-string-in-slice(curr, end)</span>
|
||||||
<span id="L1426" class="LineNr">1426 </span> <span class="subxS2Comment"># . . push args</span>
|
<span id="L1426" class="LineNr">1426 </span> <span class="subxS2Comment"># . . push args</span>
|
||||||
|
@ -1318,11 +1318,11 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1437" class="LineNr">1437 </span> <span class="subxH1Comment"># - otherwise scan for '/'</span>
|
<span id="L1437" class="LineNr">1437 </span> <span class="subxH1Comment"># - otherwise scan for '/'</span>
|
||||||
<span id="L1438" class="LineNr">1438 </span> <span class="subxComment"># if (curr == end) return</span>
|
<span id="L1438" class="LineNr">1438 </span> <span class="subxComment"># if (curr == end) return</span>
|
||||||
<span id="L1439" class="LineNr">1439 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx and edx</span>
|
<span id="L1439" class="LineNr">1439 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx and edx</span>
|
||||||
<span id="L1440" class="LineNr">1440 </span> 74/jump-if-equal $emit-metadata:end/disp8
|
<span id="L1440" class="LineNr">1440 </span> 74/jump-if-= $emit-metadata:end/disp8
|
||||||
<span id="L1441" class="LineNr">1441 </span> <span class="subxComment"># if (*curr == '/') break</span>
|
<span id="L1441" class="LineNr">1441 </span> <span class="subxComment"># if (*curr == '/') break</span>
|
||||||
<span id="L1442" class="LineNr">1442 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
<span id="L1442" class="LineNr">1442 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to AL</span>
|
||||||
<span id="L1443" class="LineNr">1443 </span> 3d/compare-eax-and 0x2f/imm32/slash
|
<span id="L1443" class="LineNr">1443 </span> 3d/compare-eax-and 0x2f/imm32/slash
|
||||||
<span id="L1444" class="LineNr">1444 </span> 74/jump-if-equal $emit-metadata:<a href='../079emit.subx.html#L10'>emit</a>/disp8
|
<span id="L1444" class="LineNr">1444 </span> 74/jump-if-= $emit-metadata:<a href='../079emit.subx.html#L10'>emit</a>/disp8
|
||||||
<span id="L1445" class="LineNr">1445 </span> <span class="subxComment"># ++curr</span>
|
<span id="L1445" class="LineNr">1445 </span> <span class="subxComment"># ++curr</span>
|
||||||
<span id="L1446" class="LineNr">1446 </span> 41/increment-ecx
|
<span id="L1446" class="LineNr">1446 </span> 41/increment-ecx
|
||||||
<span id="L1447" class="LineNr">1447 </span> eb/jump $emit-metadata:skip-datum-loop/disp8
|
<span id="L1447" class="LineNr">1447 </span> eb/jump $emit-metadata:skip-datum-loop/disp8
|
||||||
|
@ -1655,17 +1655,17 @@ if ('onhashchange' in window) {
|
||||||
<span id="L1799" class="LineNr">1799 </span><span class="Constant">$string-length-at-start-of-slice:loop</span>:
|
<span id="L1799" class="LineNr">1799 </span><span class="Constant">$string-length-at-start-of-slice:loop</span>:
|
||||||
<span id="L1800" class="LineNr">1800 </span> <span class="subxComment"># if (curr >= end) return length</span>
|
<span id="L1800" class="LineNr">1800 </span> <span class="subxComment"># if (curr >= end) return length</span>
|
||||||
<span id="L1801" class="LineNr">1801 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L1801" class="LineNr">1801 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L1802" class="LineNr">1802 </span> 73/jump-if-greater-unsigned-or-equal $string-length-at-start-of-slice:end/disp8
|
<span id="L1802" class="LineNr">1802 </span> 73/jump-if-addr>= $string-length-at-start-of-slice:end/disp8
|
||||||
<span id="L1803" class="LineNr">1803 </span> <span class="subxComment"># c = *curr</span>
|
<span id="L1803" class="LineNr">1803 </span> <span class="subxComment"># c = *curr</span>
|
||||||
<span id="L1804" class="LineNr">1804 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span>
|
<span id="L1804" class="LineNr">1804 </span> 8a/copy-byte 0/mod/indirect 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *ecx to BL</span>
|
||||||
<span id="L1805" class="LineNr">1805 </span><span class="Constant">$string-length-at-start-of-slice:dquote</span>:
|
<span id="L1805" class="LineNr">1805 </span><span class="Constant">$string-length-at-start-of-slice:dquote</span>:
|
||||||
<span id="L1806" class="LineNr">1806 </span> <span class="subxComment"># if (c == '"') break</span>
|
<span id="L1806" class="LineNr">1806 </span> <span class="subxComment"># if (c == '"') break</span>
|
||||||
<span id="L1807" class="LineNr">1807 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x22/imm32/dquote <span class="subxComment"># compare ebx</span>
|
<span id="L1807" class="LineNr">1807 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x22/imm32/dquote <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L1808" class="LineNr">1808 </span> 74/jump-if-equal $string-length-at-start-of-slice:end/disp8
|
<span id="L1808" class="LineNr">1808 </span> 74/jump-if-= $string-length-at-start-of-slice:end/disp8
|
||||||
<span id="L1809" class="LineNr">1809 </span><span class="Constant">$string-length-at-start-of-slice:check-for-escape</span>:
|
<span id="L1809" class="LineNr">1809 </span><span class="Constant">$string-length-at-start-of-slice:check-for-escape</span>:
|
||||||
<span id="L1810" class="LineNr">1810 </span> <span class="subxComment"># if (c == '\') escape next char</span>
|
<span id="L1810" class="LineNr">1810 </span> <span class="subxComment"># if (c == '\') escape next char</span>
|
||||||
<span id="L1811" class="LineNr">1811 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x5c/imm32/backslash <span class="subxComment"># compare ebx</span>
|
<span id="L1811" class="LineNr">1811 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0x5c/imm32/backslash <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L1812" class="LineNr">1812 </span> 75/jump-if-not-equal $string-length-at-start-of-slice:continue/disp8
|
<span id="L1812" class="LineNr">1812 </span> 75/jump-if-!= $string-length-at-start-of-slice:continue/disp8
|
||||||
<span id="L1813" class="LineNr">1813 </span><span class="Constant">$string-length-at-start-of-slice:escape</span>:
|
<span id="L1813" class="LineNr">1813 </span><span class="Constant">$string-length-at-start-of-slice:escape</span>:
|
||||||
<span id="L1814" class="LineNr">1814 </span> <span class="subxComment"># increment curr but not result</span>
|
<span id="L1814" class="LineNr">1814 </span> <span class="subxComment"># increment curr but not result</span>
|
||||||
<span id="L1815" class="LineNr">1815 </span> 41/increment-ecx
|
<span id="L1815" class="LineNr">1815 </span> 41/increment-ecx
|
||||||
|
|
|
@ -104,10 +104,10 @@ if ('onhashchange' in window) {
|
||||||
<span id="L45" class="LineNr">45 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to BL</span>
|
<span id="L45" class="LineNr">45 </span> 8a/copy-byte 0/mod/indirect 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to BL</span>
|
||||||
<span id="L46" class="LineNr">46 </span> <span class="subxComment"># if (c1 == 0) break</span>
|
<span id="L46" class="LineNr">46 </span> <span class="subxComment"># if (c1 == 0) break</span>
|
||||||
<span id="L47" class="LineNr">47 </span> 3d/compare-eax-and 0/imm32
|
<span id="L47" class="LineNr">47 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L48" class="LineNr">48 </span> 74/jump-if-equal $argv-equal:<span class="Constant">break</span>/disp8
|
<span id="L48" class="LineNr">48 </span> 74/jump-if-= $argv-equal:<span class="Constant">break</span>/disp8
|
||||||
<span id="L49" class="LineNr">49 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
<span id="L49" class="LineNr">49 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
||||||
<span id="L50" class="LineNr">50 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
<span id="L50" class="LineNr">50 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
||||||
<span id="L51" class="LineNr">51 </span> 75/jump-if-not-equal $argv-equal:false/disp8
|
<span id="L51" class="LineNr">51 </span> 75/jump-if-!= $argv-equal:false/disp8
|
||||||
<span id="L52" class="LineNr">52 </span> <span class="subxComment"># ++s1, ++s2</span>
|
<span id="L52" class="LineNr">52 </span> <span class="subxComment"># ++s1, ++s2</span>
|
||||||
<span id="L53" class="LineNr">53 </span> 41/increment-ecx
|
<span id="L53" class="LineNr">53 </span> 41/increment-ecx
|
||||||
<span id="L54" class="LineNr">54 </span> 42/increment-edx
|
<span id="L54" class="LineNr">54 </span> 42/increment-edx
|
||||||
|
@ -116,7 +116,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L57" class="LineNr">57 </span><span class="Constant">$argv-equal:break</span>:
|
<span id="L57" class="LineNr">57 </span><span class="Constant">$argv-equal:break</span>:
|
||||||
<span id="L58" class="LineNr">58 </span> <span class="subxComment"># if (c2 == 0) return true</span>
|
<span id="L58" class="LineNr">58 </span> <span class="subxComment"># if (c2 == 0) return true</span>
|
||||||
<span id="L59" class="LineNr">59 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ebx</span>
|
<span id="L59" class="LineNr">59 </span> 81 7/subop/compare 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ebx</span>
|
||||||
<span id="L60" class="LineNr">60 </span> 75/jump-if-not-equal $argv-equal:false/disp8
|
<span id="L60" class="LineNr">60 </span> 75/jump-if-!= $argv-equal:false/disp8
|
||||||
<span id="L61" class="LineNr">61 </span><span class="Constant">$argv-equal:success</span>:
|
<span id="L61" class="LineNr">61 </span><span class="Constant">$argv-equal:success</span>:
|
||||||
<span id="L62" class="LineNr">62 </span> b8/copy-to-eax 1/imm32
|
<span id="L62" class="LineNr">62 </span> b8/copy-to-eax 1/imm32
|
||||||
<span id="L63" class="LineNr">63 </span> c3/return
|
<span id="L63" class="LineNr">63 </span> c3/return
|
||||||
|
|
|
@ -135,17 +135,17 @@ if ('onhashchange' in window) {
|
||||||
<span id="L73" class="LineNr"> 73 </span><span class="Constant">$kernel-string-equal?:loop</span>:
|
<span id="L73" class="LineNr"> 73 </span><span class="Constant">$kernel-string-equal?:loop</span>:
|
||||||
<span id="L74" class="LineNr"> 74 </span> <span class="subxComment"># if (i >= n) break</span>
|
<span id="L74" class="LineNr"> 74 </span> <span class="subxComment"># if (i >= n) break</span>
|
||||||
<span id="L75" class="LineNr"> 75 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
<span id="L75" class="LineNr"> 75 </span> 39/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 2/r32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare ecx with edx</span>
|
||||||
<span id="L76" class="LineNr"> 76 </span> 7d/jump-if-greater-or-equal $kernel-string-equal?:<span class="Constant">break</span>/disp8
|
<span id="L76" class="LineNr"> 76 </span> 7d/jump-if->= $kernel-string-equal?:<span class="Constant">break</span>/disp8
|
||||||
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># c1 = *s1</span>
|
<span id="L77" class="LineNr"> 77 </span> <span class="subxComment"># c1 = *s1</span>
|
||||||
<span id="L78" class="LineNr"> 78 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span>
|
<span id="L78" class="LineNr"> 78 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span>
|
||||||
<span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># c2 = *s2</span>
|
<span id="L79" class="LineNr"> 79 </span> <span class="subxComment"># c2 = *s2</span>
|
||||||
<span id="L80" class="LineNr"> 80 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to BL</span>
|
<span id="L80" class="LineNr"> 80 </span> 8a/copy-byte 0/mod/indirect 6/rm32/esi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/BL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *esi to BL</span>
|
||||||
<span id="L81" class="LineNr"> 81 </span> <span class="subxComment"># if (c1 == 0) return false</span>
|
<span id="L81" class="LineNr"> 81 </span> <span class="subxComment"># if (c1 == 0) return false</span>
|
||||||
<span id="L82" class="LineNr"> 82 </span> 3d/compare-eax-and 0/imm32
|
<span id="L82" class="LineNr"> 82 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L83" class="LineNr"> 83 </span> 74/jump-if-equal $kernel-string-equal?:false/disp8
|
<span id="L83" class="LineNr"> 83 </span> 74/jump-if-= $kernel-string-equal?:false/disp8
|
||||||
<span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
<span id="L84" class="LineNr"> 84 </span> <span class="subxComment"># if (c1 != c2) return false</span>
|
||||||
<span id="L85" class="LineNr"> 85 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
<span id="L85" class="LineNr"> 85 </span> 39/compare 3/mod/direct 0/rm32/eax <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 3/r32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># compare eax and ebx</span>
|
||||||
<span id="L86" class="LineNr"> 86 </span> 75/jump-if-not-equal $kernel-string-equal?:false/disp8
|
<span id="L86" class="LineNr"> 86 </span> 75/jump-if-!= $kernel-string-equal?:false/disp8
|
||||||
<span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># ++i</span>
|
<span id="L87" class="LineNr"> 87 </span> <span class="subxComment"># ++i</span>
|
||||||
<span id="L88" class="LineNr"> 88 </span> 41/increment-ecx
|
<span id="L88" class="LineNr"> 88 </span> 41/increment-ecx
|
||||||
<span id="L89" class="LineNr"> 89 </span> <span class="subxComment"># ++s1</span>
|
<span id="L89" class="LineNr"> 89 </span> <span class="subxComment"># ++s1</span>
|
||||||
|
@ -157,7 +157,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L95" class="LineNr"> 95 </span> <span class="subxComment"># return *s1 == 0</span>
|
<span id="L95" class="LineNr"> 95 </span> <span class="subxComment"># return *s1 == 0</span>
|
||||||
<span id="L96" class="LineNr"> 96 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span>
|
<span id="L96" class="LineNr"> 96 </span> 8a/copy-byte 0/mod/indirect 7/rm32/edi <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/r32/AL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edi to AL</span>
|
||||||
<span id="L97" class="LineNr"> 97 </span> 3d/compare-eax-and 0/imm32
|
<span id="L97" class="LineNr"> 97 </span> 3d/compare-eax-and 0/imm32
|
||||||
<span id="L98" class="LineNr"> 98 </span> 75/jump-if-not-equal $kernel-string-equal?:false/disp8
|
<span id="L98" class="LineNr"> 98 </span> 75/jump-if-!= $kernel-string-equal?:false/disp8
|
||||||
<span id="L99" class="LineNr"> 99 </span><span class="Constant">$kernel-string-equal?:true</span>:
|
<span id="L99" class="LineNr"> 99 </span><span class="Constant">$kernel-string-equal?:true</span>:
|
||||||
<span id="L100" class="LineNr">100 </span> b8/copy-to-eax 1/imm32
|
<span id="L100" class="LineNr">100 </span> b8/copy-to-eax 1/imm32
|
||||||
<span id="L101" class="LineNr">101 </span> eb/jump $kernel-string-equal?:end/disp8
|
<span id="L101" class="LineNr">101 </span> eb/jump $kernel-string-equal?:end/disp8
|
||||||
|
|
|
@ -79,7 +79,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L21" class="LineNr">21 </span><span class="Constant">$loop</span>:
|
<span id="L21" class="LineNr">21 </span><span class="Constant">$loop</span>:
|
||||||
<span id="L22" class="LineNr">22 </span> <span class="subxComment"># if (counter > 10) break</span>
|
<span id="L22" class="LineNr">22 </span> <span class="subxComment"># if (counter > 10) break</span>
|
||||||
<span id="L23" class="LineNr">23 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xa/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L23" class="LineNr">23 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0xa/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L24" class="LineNr">24 </span> 7f/jump-if-greater $exit/disp8
|
<span id="L24" class="LineNr">24 </span> 7f/jump-if-> $exit/disp8
|
||||||
<span id="L25" class="LineNr">25 </span> <span class="subxComment"># result += counter</span>
|
<span id="L25" class="LineNr">25 </span> <span class="subxComment"># result += counter</span>
|
||||||
<span id="L26" class="LineNr">26 </span> 01/add 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># add ecx to ebx</span>
|
<span id="L26" class="LineNr">26 </span> 01/add 3/mod/direct 3/rm32/ebx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># add ecx to ebx</span>
|
||||||
<span id="L27" class="LineNr">27 </span> <span class="subxComment"># ++counter</span>
|
<span id="L27" class="LineNr">27 </span> <span class="subxComment"># ++counter</span>
|
||||||
|
|
|
@ -103,7 +103,7 @@ if ('onhashchange' in window) {
|
||||||
<span id="L44" class="LineNr">44 </span> 8a/copy-byte 0/mod/* 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span>
|
<span id="L44" class="LineNr">44 </span> 8a/copy-byte 0/mod/* 2/rm32/edx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 1/r32/CL <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="subxComment"># copy byte at *edx to CL</span>
|
||||||
<span id="L45" class="LineNr">45 </span> <span class="subxComment"># if (c == '\0') break</span>
|
<span id="L45" class="LineNr">45 </span> <span class="subxComment"># if (c == '\0') break</span>
|
||||||
<span id="L46" class="LineNr">46 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ecx</span>
|
<span id="L46" class="LineNr">46 </span> 81 7/subop/compare 3/mod/direct 1/rm32/ecx <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> <span class="Normal"> . </span> 0/imm32 <span class="subxComment"># compare ecx</span>
|
||||||
<span id="L47" class="LineNr">47 </span> 74/jump-if-equal $ascii-length:end/disp8
|
<span id="L47" class="LineNr">47 </span> 74/jump-if-= $ascii-length:end/disp8
|
||||||
<span id="L48" class="LineNr">48 </span> <span class="subxComment"># ++s</span>
|
<span id="L48" class="LineNr">48 </span> <span class="subxComment"># ++s</span>
|
||||||
<span id="L49" class="LineNr">49 </span> 42/increment-edx
|
<span id="L49" class="LineNr">49 </span> 42/increment-edx
|
||||||
<span id="L50" class="LineNr">50 </span> <span class="subxComment"># ++result</span>
|
<span id="L50" class="LineNr">50 </span> <span class="subxComment"># ++result</span>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue