unsigned comparison for addresses in more places
This commit is contained in:
parent
954133e200
commit
51c311d5f9
|
@ -63,7 +63,7 @@ $string-equal?:lengths:
|
|||
$string-equal?:loop:
|
||||
# if (currs >= maxs) return true
|
||||
39/compare 3/mod/direct 6/rm32/ESI . . . 1/r32/ECX . . # compare ESI with ECX
|
||||
7d/jump-if-greater-or-equal $string-equal?:true/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $string-equal?:true/disp8
|
||||
# c1 = *currs
|
||||
8a/copy-byte 0/mod/indirect 6/rm32/ESI . . . 0/r32/AL . . # copy byte at *ESI to AL
|
||||
# c2 = *currb
|
||||
|
|
|
@ -37,7 +37,7 @@ clear-stream: # f : (address stream) -> <void>
|
|||
$clear-stream:loop:
|
||||
# if (EAX >= ECX) break
|
||||
39/compare 3/mod/direct 0/rm32/EAX . . . 1/r32/ECX . . # compare EAX with ECX
|
||||
7d/jump-if-greater-or-equal $clear-stream:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $clear-stream:end/disp8
|
||||
# *EAX = 0
|
||||
c6 0/subop/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm8 # copy byte to *EAX
|
||||
# ++EAX
|
||||
|
|
|
@ -263,14 +263,13 @@ check-trace-scans-to: # line : (address string), msg : (address string)
|
|||
89/copy 3/mod/direct 5/rm32/EBP . . . 4/r32/ESP . . # copy ESP to EBP
|
||||
# . save registers
|
||||
50/push-EAX
|
||||
# EAX = trace-scan(*Trace-stream, line)
|
||||
# EAX = trace-scan(line)
|
||||
# . . push args
|
||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 8/disp8 . # push *(EBP+8)
|
||||
ff 6/subop/push 0/mod/indirect 5/rm32/.disp32 . . . Trace-stream/disp32 # push *Trace-stream
|
||||
# . . call
|
||||
e8/call trace-scan/disp32
|
||||
# . . 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 . . . . . 4/imm32 # add to ESP
|
||||
# check-ints-equal(EAX, 1, msg)
|
||||
# . . push args
|
||||
ff 6/subop/push 1/mod/*+disp8 5/rm32/EBP . . . . 0xc/disp8 . # push *(EBP+12)
|
||||
|
@ -571,12 +570,12 @@ next-line-matches?: # t : (address stream), line : (address string) -> result/E
|
|||
$next-line-matches?:loop:
|
||||
# if (currl/ESI >= maxl/ECX) break
|
||||
39/compare 3/mod/direct 6/rm32/ESI . . . 1/r32/ECX . . # compare ESI and ECX
|
||||
7d/jump-if-greater-or-equal $next-line-matches?:break/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $next-line-matches?:break/disp8
|
||||
# if (currt/EDI >= maxt/EDX) return false
|
||||
# . EAX = false
|
||||
b8/copy-to-EAX 0/imm32/false
|
||||
39/compare 3/mod/direct 7/rm32/EDI . . . 2/r32/EDX . . # compare EDI and EDX
|
||||
7d/jump-if-greater-or-equal $next-line-matches?:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $next-line-matches?:end/disp8
|
||||
# if (*currt/EDI != *currl/ESI) return false
|
||||
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
|
||||
|
@ -738,7 +737,7 @@ skip-next-line: # t : (address stream)
|
|||
$skip-next-line:loop:
|
||||
# if (curr/ECX >= max/EBX) break
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 3/r32/EBX . . # compare ECX and EBX
|
||||
7d/jump-if-greater-or-equal $skip-next-line:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $skip-next-line:end/disp8
|
||||
# ++i/EDX
|
||||
42/increment-EDX
|
||||
# if (*curr/ECX == '\n') break
|
||||
|
@ -831,7 +830,7 @@ clear-trace-stream:
|
|||
$clear-trace-stream:loop:
|
||||
# if (EAX >= ECX) break
|
||||
39/compare 3/mod/direct 0/rm32/EAX . . . 1/r32/ECX . . # compare EAX with ECX
|
||||
7d/jump-if-greater-or-equal $clear-trace-stream:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $clear-trace-stream:end/disp8
|
||||
# *EAX = 0
|
||||
c7 0/subop/copy 0/mod/direct 0/rm32/EAX . . . . . 0/imm32 # copy to *EAX
|
||||
# EAX += 4
|
||||
|
@ -904,10 +903,10 @@ _append-4: # out : address, outend : address, in : address, inend : address ->
|
|||
$_append-4:loop:
|
||||
# if (in >= inend) break
|
||||
39/compare 3/mod/direct 6/rm32/ESI . . . 1/r32/ECX . . # compare ESI with ECX
|
||||
7d/jump-if-greater-or-equal $_append-4:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $_append-4:end/disp8
|
||||
# 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
|
||||
7d/jump-if-greater-or-equal $_append-4:abort/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $_append-4:abort/disp8
|
||||
# *out = *in
|
||||
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
|
||||
|
|
|
@ -19,7 +19,7 @@ stream-data-equal?: # f : (address stream), s : (address string) -> EAX : boole
|
|||
8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 6/r32/ESI 8/disp8 . # copy *(EBP+8) to ESI
|
||||
# EAX = f->write
|
||||
8b/copy 0/mod/indirect 6/rm32/ESI . . . 0/r32/EAX . . # copy *ESI to EAX
|
||||
# max/EDX = f->data + f->write
|
||||
# maxf/EDX = f->data + f->write
|
||||
8d/copy-address 1/mod/*+disp8 4/rm32/sib 6/base/ESI 0/index/EAX . 2/r32/EDX 0xc/disp8 . # copy ESI+EAX+12 to EDX
|
||||
# currf/ESI = f->data
|
||||
81 0/subop/add 3/mod/direct 6/rm32/ESI . . . . . 0xc/imm32 # add to ESI
|
||||
|
@ -34,9 +34,9 @@ stream-data-equal?: # f : (address stream), s : (address string) -> EAX : boole
|
|||
31/xor 3/mod/direct 0/rm32/EAX . . . 0/r32/EAX . . # clear EAX
|
||||
31/xor 3/mod/direct 1/rm32/ECX . . . 1/r32/ECX . . # clear ECX
|
||||
$stream-data-equal?:loop:
|
||||
# if (curr >= max) return true
|
||||
# if (currf >= maxf) return true
|
||||
39/compare 3/mod/direct 6/rm32/ESI . . . 2/r32/EDX . . # compare ESI with EDX
|
||||
7d/jump-if-greater-or-equal $stream-data-equal?:true/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $stream-data-equal?:true/disp8
|
||||
# AL = *currs
|
||||
8a/copy-byte 0/mod/indirect 6/rm32/ESI . . . 0/r32/AL . . # copy byte at *ESI to AL
|
||||
# CL = *curr
|
||||
|
|
|
@ -165,10 +165,10 @@ _buffer-4: # out : address, outend : address, in : address, inend : address ->
|
|||
$_buffer-4:loop:
|
||||
# if (in >= inend) break
|
||||
39/compare 3/mod/direct 6/rm32/ESI . . . 1/r32/ECX . . # compare ESI with ECX
|
||||
7d/jump-if-greater-or-equal $_buffer-4:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $_buffer-4:end/disp8
|
||||
# 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
|
||||
7d/jump-if-greater-or-equal $_buffer-4:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $_buffer-4:end/disp8
|
||||
# *out = *in
|
||||
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
|
||||
|
|
|
@ -23,7 +23,7 @@ is-hex-int?: # in : (address slice) -> EAX : boolean
|
|||
# if s is empty return false
|
||||
b8/copy-to-EAX 0/imm32/false
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 2/r32/EDX . . # compare ECX with EDX
|
||||
7d/jump-if-greater-or-equal $is-hex-int?:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $is-hex-int?:end/disp8
|
||||
# skip past leading '-'
|
||||
# . if (*curr == '-') ++curr
|
||||
31/xor 3/mod/direct 3/rm32/EBX . . . 3/r32/EBX . . # clear EBX
|
||||
|
@ -44,7 +44,7 @@ $is-hex-int?:initial-0:
|
|||
$is-hex-int?:initial-0x:
|
||||
# . if (curr >= in->end) return true
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 2/r32/EDX . . # compare ECX with EDX
|
||||
7d/jump-if-greater-or-equal $is-hex-int?:true/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $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
|
||||
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
|
||||
|
@ -55,7 +55,7 @@ $is-hex-int?:initial-0x:
|
|||
$is-hex-int?:loop:
|
||||
# if (curr >= in->end) return true
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 2/r32/EDX . . # compare ECX with EDX
|
||||
7d/jump-if-greater-or-equal $is-hex-int?:true/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $is-hex-int?:true/disp8
|
||||
# EAX = is-hex-digit?(*curr)
|
||||
# . . push args
|
||||
8a/copy-byte 0/mod/indirect 1/rm32/ECX . . . 0/r32/AL . . # copy byte at *ECX to AL
|
||||
|
@ -356,7 +356,7 @@ $parse-hex-int:initial-0:
|
|||
$parse-hex-int:initial-0x:
|
||||
# . if (curr >= in->end) return result
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 2/r32/EDX . . # compare ECX with EDX
|
||||
7d/jump-if-greater-or-equal $parse-hex-int:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $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
|
||||
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
|
||||
|
@ -367,7 +367,7 @@ $parse-hex-int:initial-0x:
|
|||
$parse-hex-int:loop:
|
||||
# if (curr >= in->end) break
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 2/r32/EDX . . # compare ECX with EDX
|
||||
7d/jump-if-greater-or-equal $parse-hex-int:negate/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $parse-hex-int:negate/disp8
|
||||
# EAX = from-hex-char(*curr)
|
||||
# . . copy arg to EAX
|
||||
8a/copy-byte 0/mod/indirect 1/rm32/ECX . . . 0/r32/AL . . # copy byte at *ECX to AL
|
||||
|
|
|
@ -52,7 +52,7 @@ write-buffered: # f : (address buffered-file), msg : (address array byte) -> <v
|
|||
$write-buffered:loop:
|
||||
# if (in >= inend) break
|
||||
39/compare 3/mod/direct 6/rm32/ESI . . . 1/r32/ECX . . # compare ESI with ECX
|
||||
7d/jump-if-greater-or-equal $write-buffered:loop-end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $write-buffered:loop-end/disp8
|
||||
# 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
|
||||
7c/jump-if-lesser $write-buffered:to-stream/disp8
|
||||
|
|
|
@ -147,7 +147,7 @@ $slice-equal?:nonnull-string:
|
|||
$slice-equal?:loop:
|
||||
# if (currs >= maxs) return true
|
||||
39/compare 3/mod/direct 2/rm32/EDX . . . 6/r32/ESI . . # compare EDX with ESI
|
||||
7d/jump-if-greater-or-equal $slice-equal?:true/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $slice-equal?:true/disp8
|
||||
# AL = *currp
|
||||
8a/copy-byte 0/mod/indirect 3/rm32/EBX . . . 0/r32/AL . . # copy byte at *EBX to AL
|
||||
# CL = *currs
|
||||
|
@ -723,7 +723,7 @@ write-slice-buffered: # out : (address buffered-file), s : (address slice)
|
|||
$write-slice-buffered:loop:
|
||||
# if (curr >= max) break
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 6/r32/ESI . . # compare ECX with ESI
|
||||
7d/jump-if-greater-or-equal $write-slice-buffered:loop-end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $write-slice-buffered:loop-end/disp8
|
||||
# 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
|
||||
7c/jump-if-lesser $write-slice-buffered:to-stream/disp8
|
||||
|
|
|
@ -693,7 +693,7 @@ skip-chars-matching-in-slice: # curr : (address byte), end : (address byte), de
|
|||
$skip-chars-matching-in-slice:loop:
|
||||
# if (curr >= end) break
|
||||
39/compare 3/mod/direct 0/rm32/EAX . . . 1/r32/ECX . . # compare EAX with ECX
|
||||
7d/jump-if-greater-or-equal $skip-chars-matching-in-slice:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $skip-chars-matching-in-slice:end/disp8
|
||||
# if (*curr != delimiter) break
|
||||
8a/copy-byte 0/mod/indirect 0/rm32/EAX . . . 3/r32/BL . . # copy byte at *EAX to BL
|
||||
39/compare 3/mod/direct 3/rm32/EBX . . . 2/r32/EDX . . # compare EBX and EDX
|
||||
|
@ -789,7 +789,7 @@ skip-chars-not-matching-in-slice: # curr : (address byte), end : (address byte)
|
|||
$skip-chars-not-matching-in-slice:loop:
|
||||
# if (curr >= end) break
|
||||
39/compare 3/mod/direct 0/rm32/EAX . . . 1/r32/ECX . . # compare EAX with ECX
|
||||
7d/jump-if-greater-or-equal $skip-chars-not-matching-in-slice:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $skip-chars-not-matching-in-slice:end/disp8
|
||||
# if (*curr == delimiter) break
|
||||
8a/copy-byte 0/mod/indirect 0/rm32/EAX . . . 3/r32/BL . . # copy byte at *EAX to BL
|
||||
39/compare 3/mod/direct 3/rm32/EBX . . . 2/r32/EDX . . # compare EBX and EDX
|
||||
|
|
|
@ -89,7 +89,7 @@ $print-int32-decimal:write-loop:
|
|||
74/jump-if-equal $print-int32-decimal:write-break/disp8
|
||||
# if (curr >= max) abort
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 3/r32/EBX . . # compare ECX with EBX
|
||||
7d/jump-if-greater-or-equal $print-int32-decimal:abort/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $print-int32-decimal:abort/disp8
|
||||
$print-int32-decimal:write-char:
|
||||
# *curr = AL
|
||||
88/copy-byte 0/mod/indirect 1/rm32/ECX . . . 0/r32/AL . . # copy AL to byte at *ECX
|
||||
|
|
|
@ -294,7 +294,7 @@ parse-array-of-ints: # ad : (address allocation-descriptor), s : (address strin
|
|||
$parse-array-of-ints:loop1:
|
||||
# if (curr >= end) break
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 2/r32/EDX . . # compare ECX with EDX
|
||||
7d/jump-if-greater-or-equal $parse-array-of-ints:break1/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:break1/disp8
|
||||
# curr = skip-chars-matching-in-slice(curr, end, ' ')
|
||||
# . EAX = skip-chars-matching-in-slice(curr, end, ' ')
|
||||
# . . push args
|
||||
|
@ -309,7 +309,7 @@ $parse-array-of-ints:loop1:
|
|||
89/copy 3/mod/direct 1/rm32/ECX . . . 0/r32/EAX . . # copy EAX to ECX
|
||||
# if (curr >= end) break
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 2/r32/EDX . . # compare ECX with EDX
|
||||
7d/jump-if-greater-or-equal $parse-array-of-ints:break1/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:break1/disp8
|
||||
# curr = skip-chars-not-matching-in-slice(curr, end, ' ')
|
||||
# . EAX = skip-chars-not-matching-in-slice(curr, end, ' ')
|
||||
# . . push args
|
||||
|
@ -355,7 +355,7 @@ $parse-array-of-ints:pass2:
|
|||
$parse-array-of-ints:loop2:
|
||||
# if (slice->curr >= end) break
|
||||
39/compare 0/mod/indirect 1/rm32/ECX . . . 2/r32/EDX . . # compare *ECX with EDX
|
||||
7d/jump-if-greater-or-equal $parse-array-of-ints:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:end/disp8
|
||||
# slice->curr = skip-chars-matching-in-slice(slice->curr, end, ' ')
|
||||
# . EAX = skip-chars-matching-in-slice(slice->curr, end, ' ')
|
||||
# . . push args
|
||||
|
@ -370,7 +370,7 @@ $parse-array-of-ints:loop2:
|
|||
89/copy 0/mod/indirect 1/rm32/ECX . . . 0/r32/EAX . . # copy EAX to *ECX
|
||||
# if (slice->curr >= end) break
|
||||
39/compare 0/mod/indirect 1/rm32/ECX . . . 2/r32/EDX . . # compare *ECX with EDX
|
||||
7d/jump-if-greater-or-equal $parse-array-of-ints:end/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $parse-array-of-ints:end/disp8
|
||||
# slice->end = skip-chars-not-matching-in-slice(slice->curr, end, ' ')
|
||||
# . EAX = skip-chars-not-matching-in-slice(curr, end, ' ')
|
||||
# . . push args
|
||||
|
|
BIN
subx/apps/assort
BIN
subx/apps/assort
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
subx/apps/handle
BIN
subx/apps/handle
Binary file not shown.
BIN
subx/apps/hex
BIN
subx/apps/hex
Binary file not shown.
BIN
subx/apps/pack
BIN
subx/apps/pack
Binary file not shown.
|
@ -71,7 +71,7 @@ $get-or-insert:not-found:
|
|||
# if (table->write >= table->length) abort
|
||||
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)
|
||||
7d/jump-if-greater-or-equal $get-or-insert:abort/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $get-or-insert:abort/disp8
|
||||
# *max = key
|
||||
# . EAX = key
|
||||
8b/copy 1/mod/*+disp8 5/rm32/EBP . . . 0/r32/EAX 0xc/disp8 . # copy *(EBP+12) to EAX
|
||||
|
@ -290,7 +290,7 @@ get-or-insert-slice: # table : (address stream {string, _}), key : (address sli
|
|||
$get-or-insert-slice:search-loop:
|
||||
# if (curr >= max) break
|
||||
39/compare 3/mod/direct 1/rm32/ECX . . . 2/r32/EDX . . # compare ECX with EDX
|
||||
7d/jump-if-greater-or-equal $get-or-insert-slice:not-found/disp8
|
||||
73/jump-if-greater-or-equal-unsigned $get-or-insert-slice:not-found/disp8
|
||||
# if (slice-equal?(key, *curr)) return curr+4
|
||||
# . EAX = slice-equal?(key, *curr)
|
||||
# . . push args
|
||||
|
|
BIN
subx/apps/survey
BIN
subx/apps/survey
Binary file not shown.
Loading…
Reference in New Issue