Skip to content

Commit 2d1dbae

Browse files
committed
feat: make XOR bool normalized
1 parent 7ce2707 commit 2d1dbae

5 files changed

Lines changed: 35 additions & 13 deletions

File tree

src/arch/z80/peephole/opts/020_o1_bool_norm_empty.opt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,5 +26,5 @@ IF {{
2626
"call .core.__GEF", "call .core.__LEI16", "call .core.__LEI8", "call .core.__LTI8",
2727
"call .core.__ANDF", "call .core.__EQF", "call .core.__GTF", "call .core.__LTI16",
2828
"call .core.__LEF", "call .core.__LEI32", "call .core.__LTF", "call .core.__LTI32",
29-
"call .core.__NEF", "call .core.__NOTF", "call .core.__ORF")
29+
"call .core.__NEF", "call .core.__NOTF", "call .core.__ORF", "call .core.__XORF")
3030
}}

src/arch/z80/peephole/opts/021_o1_bool_norm_neg.opt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,5 @@ WITH {{
2222
}}
2323

2424
IF {{
25-
$1 == "sbc a, a" ||
26-
$1 == "call .core.__NOT32"
25+
$1 IN ("sbc a, a", "call .core.__NOT32", "call .core.__XOR8", "call .core.__XOR16", "call .core.__XOR32")
2726
}}

tests/functional/arch/zx48k/xor16.asm

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,26 +27,35 @@ _b:
2727
ld hl, (_a)
2828
ld a, h
2929
or l
30+
sub 1
31+
sbc a, a
32+
inc a
3033
ld (_b), a
3134
ld hl, (_a)
3235
ld a, h
3336
or l
3437
sub 1
3538
sbc a, a
39+
neg
3640
ld (_b), a
3741
ld hl, (_a)
3842
ld a, h
3943
or l
44+
sub 1
45+
sbc a, a
46+
inc a
4047
ld (_b), a
4148
ld hl, (_a)
4249
ld a, h
4350
or l
4451
sub 1
4552
sbc a, a
53+
neg
4654
ld (_b), a
4755
ld de, (_a)
4856
ld hl, (_a)
4957
call .core.__XOR16
58+
neg
5059
ld (_b), a
5160
ld hl, 0
5261
ld b, h
@@ -63,9 +72,9 @@ _b:
6372
ei
6473
ret
6574
;; --- end of user code ---
66-
#line 1 "/zxbasic/src/arch/zx48k/library-asm/xor16.asm"
75+
#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/bool/xor16.asm"
6776
; XOR16 implemented in XOR8.ASM file
68-
#line 1 "/zxbasic/src/arch/zx48k/library-asm/xor8.asm"
77+
#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/bool/xor8.asm"
6978
; vim:ts=4:et:
7079
; FASTCALL boolean xor 8 version.
7180
; result in Accumulator (0 False, not 0 True)
@@ -88,6 +97,6 @@ __XOR8:
8897
xor l
8998
ret
9099
pop namespace
91-
#line 4 "/zxbasic/src/arch/zx48k/library-asm/xor16.asm"
92-
#line 41 "xor16.bas"
100+
#line 4 "/zxbasic/src/lib/arch/zx48k/runtime/bool/xor16.asm"
101+
#line 50 "arch/zx48k/xor16.bas"
93102
END

tests/functional/arch/zx48k/xor32.asm

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ _b:
3131
ld de, 0
3232
ld hl, 0
3333
call .core.__XOR32
34+
neg
3435
ld (_b), a
3536
ld hl, (_a + 2)
3637
push hl
@@ -39,6 +40,7 @@ _b:
3940
ld de, 0
4041
ld hl, 1
4142
call .core.__XOR32
43+
neg
4244
ld (_b), a
4345
ld hl, (_a)
4446
ld de, (_a + 2)
@@ -47,6 +49,7 @@ _b:
4749
ld bc, 0
4850
push bc
4951
call .core.__XOR32
52+
neg
5053
ld (_b), a
5154
ld hl, (_a)
5255
ld de, (_a + 2)
@@ -55,6 +58,7 @@ _b:
5558
ld bc, 1
5659
push bc
5760
call .core.__XOR32
61+
neg
5862
ld (_b), a
5963
ld hl, (_a + 2)
6064
push hl
@@ -63,6 +67,7 @@ _b:
6367
ld hl, (_a)
6468
ld de, (_a + 2)
6569
call .core.__XOR32
70+
neg
6671
ld (_b), a
6772
ld hl, 0
6873
ld b, h
@@ -79,12 +84,12 @@ _b:
7984
ei
8085
ret
8186
;; --- end of user code ---
82-
#line 1 "/zxbasic/src/arch/zx48k/library-asm/xor32.asm"
87+
#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/bool/xor32.asm"
8388
; FASTCALL boolean xor 8 version.
8489
; result in Accumulator (0 False, not 0 True)
8590
; __FASTCALL__ version (operands: A, H)
8691
; Performs 32bit xor 32bit and returns the boolean
87-
#line 1 "/zxbasic/src/arch/zx48k/library-asm/xor8.asm"
92+
#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/bool/xor8.asm"
8893
; vim:ts=4:et:
8994
; FASTCALL boolean xor 8 version.
9095
; result in Accumulator (0 False, not 0 True)
@@ -107,7 +112,7 @@ __XOR8:
107112
xor l
108113
ret
109114
pop namespace
110-
#line 7 "/zxbasic/src/arch/zx48k/library-asm/xor32.asm"
115+
#line 7 "/zxbasic/src/lib/arch/zx48k/runtime/bool/xor32.asm"
111116
push namespace core
112117
__XOR32:
113118
ld a, h
@@ -125,5 +130,5 @@ __XOR32:
125130
ld h, c
126131
jp __XOR8
127132
pop namespace
128-
#line 57 "xor32.bas"
133+
#line 62 "arch/zx48k/xor32.bas"
129134
END

tests/functional/arch/zx48k/xor8.asm

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,20 +25,29 @@ _b:
2525
.core.ZXBASIC_USER_DATA_END:
2626
.core.__MAIN_PROGRAM__:
2727
ld a, (_a)
28+
sub 1
29+
sbc a, a
30+
inc a
2831
ld (_b), a
2932
ld a, (_a)
3033
sub 1
3134
sbc a, a
35+
neg
3236
ld (_b), a
3337
ld a, (_a)
38+
sub 1
39+
sbc a, a
40+
inc a
3441
ld (_b), a
3542
ld a, (_a)
3643
sub 1
3744
sbc a, a
45+
neg
3846
ld (_b), a
3947
ld hl, (_a - 1)
4048
ld a, (_a)
4149
call .core.__XOR8
50+
neg
4251
ld (_b), a
4352
ld hl, 0
4453
ld b, h
@@ -55,7 +64,7 @@ _b:
5564
ei
5665
ret
5766
;; --- end of user code ---
58-
#line 1 "/zxbasic/src/arch/zx48k/library-asm/xor8.asm"
67+
#line 1 "/zxbasic/src/lib/arch/zx48k/runtime/bool/xor8.asm"
5968
; vim:ts=4:et:
6069
; FASTCALL boolean xor 8 version.
6170
; result in Accumulator (0 False, not 0 True)
@@ -78,5 +87,5 @@ __XOR8:
7887
xor l
7988
ret
8089
pop namespace
81-
#line 33 "xor8.bas"
90+
#line 42 "arch/zx48k/xor8.bas"
8291
END

0 commit comments

Comments
 (0)