more oportunities to reduce register copies

This commit is contained in:
mlokr 2024-09-10 12:13:01 +02:00
parent b51f964cae
commit d64fa7e1f9
No known key found for this signature in database
GPG key ID: DEA147DDEE644993
13 changed files with 80 additions and 89 deletions

View file

@ -2209,6 +2209,8 @@ impl Codegen {
},
left.loc,
)
} else if left.loc.is_ref() {
(self.loc_to_reg(&left.loc, lsize), dbg!(self.ci.regs.allocate()), left.loc)
} else {
let lhs = self.loc_to_reg(left.loc, lsize);
(lhs.as_ref(), lhs, Loc::default())
@ -2295,7 +2297,7 @@ impl Codegen {
self.output.emit(op_fn(dst.get(), lhs.get(), rhs.get()));
self.output.emit(cmpui(dst.get(), dst.get(), against));
if matches!(op, T::Eq | T::Lt | T::Gt) {
self.output.emit(not(lhs.get(), lhs.get()));
self.output.emit(not(dst.get(), dst.get()));
}
self.ci.regs.free(lhs);
@ -2690,7 +2692,7 @@ impl Codegen {
}
def_op!(basic_op | a, b, c | a, b, c as _);
def_op!(sub_op | a, b, c | b, a, c.wrapping_neg() as _);
def_op!(sub_op | a, b, c | a, b, c.wrapping_neg() as _);
let ops = match op {
T::Add => basic_op!(addi8, addi16, addi32, addi64),

View file

@ -6,6 +6,6 @@ main:
LD r31, r254, 0a, 16h
ADDI64 r254, r254, 16d
JALA r0, r31, 0a
code size: 239
code size: 236
ret: 50
status: Ok(())

View file

@ -34,21 +34,21 @@ main:
JMP :1
2: CP r33, r0
LD r33, r254, 4a, 4h
CP r32, r0
LD r32, r254, 8a, 4h
ADD32 r33, r33, r32
CP r32, r0
LD r32, r254, 0a, 1h
ADD32 r33, r33, r32
CP r32, r0
LD r32, r254, 1a, 1h
ADD32 r33, r33, r32
CP r32, r0
LD r32, r254, 2a, 1h
ADD32 r33, r33, r32
CP r32, r0
LD r32, r254, 3a, 1h
ADD32 r1, r33, r32
CP r34, r0
LD r34, r254, 8a, 4h
ADD32 r32, r33, r34
CP r34, r0
LD r34, r254, 0a, 1h
ADD32 r32, r32, r34
CP r34, r0
LD r34, r254, 1a, 1h
ADD32 r32, r32, r34
CP r34, r0
LD r34, r254, 2a, 1h
ADD32 r32, r32, r34
CP r34, r0
LD r34, r254, 3a, 1h
ADD32 r1, r32, r34
1: LD r31, r254, 12a, 32h
ADDI64 r254, r254, 44d
JALA r0, r31, 0a

View file

@ -18,19 +18,19 @@ main:
ADDI64 r254, r254, 48d
JALA r0, r31, 0a
deinit:
ADDI64 r254, r254, -24d
ST r31, r254, 0a, 24h
ADDI64 r254, r254, -32d
ST r31, r254, 0a, 32h
CP r32, r2
LD r2, r32, 0a, 8h
LD r33, r32, 16a, 8h
MULI64 r33, r33, 8d
CP r3, r33
MULI64 r34, r33, 8d
CP r3, r34
LI64 r4, 8d
JAL r31, r0, :free
CP r1, r32
JAL r31, r0, :new
LD r31, r254, 0a, 24h
ADDI64 r254, r254, 24d
LD r31, r254, 0a, 32h
ADDI64 r254, r254, 32d
JALA r0, r31, 0a
free:
ADDI64 r254, r254, -40d
@ -62,10 +62,10 @@ push:
ST r34, r32, 16a, 8h
JMP :2
1: LD r34, r32, 16a, 8h
MULI64 r34, r34, 2d
ST r34, r32, 16a, 8h
2: LD r34, r32, 16a, 8h
MULI64 r34, r34, 8d
MULI64 r35, r34, 2d
ST r35, r32, 16a, 8h
2: LD r35, r32, 16a, 8h
MULI64 r34, r35, 8d
CP r2, r34
LI64 r3, 8d
JAL r31, r0, :malloc
@ -77,37 +77,37 @@ push:
3: LD r35, r32, 0a, 8h
CP r36, r34
LD r37, r32, 0a, 8h
LD r38, r32, 8a, 8h
MULI64 r38, r38, 8d
ADD64 r37, r37, r38
7: JNE r35, r37, :5
LD r39, r32, 8a, 8h
MULI64 r39, r39, 8d
ADD64 r38, r37, r39
7: JNE r35, r38, :5
JMP :6
5: CP r38, r36
CP r39, r35
BMC r39, r38, 8h
5: CP r39, r36
CP r37, r35
BMC r37, r39, 8h
ADDI64 r35, r35, 8d
ADDI64 r36, r36, 8d
JMP :7
6: LD r38, r32, 8a, 8h
LI64 r39, 0d
JEQ r38, r39, :8
6: LD r39, r32, 8a, 8h
LI64 r37, 0d
JEQ r39, r37, :8
LD r2, r32, 0a, 8h
LD r39, r32, 8a, 8h
MULI64 r39, r39, 8d
LD r37, r32, 8a, 8h
MULI64 r39, r37, 8d
CP r3, r39
LI64 r4, 8d
JAL r31, r0, :free
8: ST r34, r32, 0a, 8h
0: LD r34, r32, 0a, 8h
LD r39, r32, 8a, 8h
MULI64 r39, r39, 8d
ADD64 r34, r34, r39
CP r39, r34
ST r33, r39, 0a, 8h
LD r39, r32, 8a, 8h
ADDI64 r39, r39, 1d
ST r39, r32, 8a, 8h
CP r1, r34
LD r37, r32, 8a, 8h
MULI64 r37, r37, 8d
ADD64 r39, r34, r37
CP r37, r39
ST r33, r37, 0a, 8h
LD r37, r32, 8a, 8h
ADDI64 r37, r37, 1d
ST r37, r32, 8a, 8h
CP r1, r39
4: LD r31, r254, 0a, 72h
ADDI64 r254, r254, 72d
JALA r0, r31, 0a

View file

@ -11,6 +11,6 @@ main:
LD r31, r254, 0a, 32h
ADDI64 r254, r254, 32d
JALA r0, r31, 0a
code size: 299
code size: 296
ret: 55
status: Ok(())

View file

@ -14,8 +14,7 @@ fib:
JGTS r32, r33, :0
LI64 r1, 1d
JMP :1
0: CP r33, r32
ADDI64 r33, r33, -1d
0: ADDI64 r33, r32, -1d
CP r2, r33
JAL r31, r0, :fib
CP r33, r1
@ -27,6 +26,6 @@ fib:
1: LD r31, r254, 0a, 24h
ADDI64 r254, r254, 24d
JALA r0, r31, 0a
code size: 231
code size: 228
ret: 55
status: Ok(())

View file

@ -4,7 +4,7 @@ main:
LI64 r33, 1d
ADDI64 r33, r33, 2d
ADDI64 r32, r33, 3d
ADDI64 r32, r1, -6d
ADDI64 r1, r32, -6d
LD r31, r254, 0a, 24h
ADDI64 r254, r254, 24d
JALA r0, r31, 0a

View file

@ -57,11 +57,10 @@ example:
CMPUI r35, r35, 0d
OR r34, r34, r35
JEQ r34, r0, :0
CP r34, r33
LI64 r35, 1024d
ADDI64 r35, r35, 0d
ADDI64 r35, r35, 1d
DIRS64 r0, r34, r34, r35
DIRS64 r0, r34, r33, r35
ADDI64 r32, r34, 0d
JMP :1
0: CP r32, r33
@ -83,20 +82,17 @@ integer:
LI64 r3, 4d
ECA
CP r34, r1
CP r35, r32
LI64 r36, 0d
CMPS r35, r35, r36
CMPS r35, r32, r36
CMPUI r35, r35, 0d
CP r36, r33
LI64 r37, 0d
CMPS r36, r36, r37
CMPS r36, r33, r37
CMPUI r36, r36, 0d
OR r35, r35, r36
JEQ r35, r0, :0
CP r35, r34
SUB64 r33, r33, r32
ADDI64 r33, r33, 1d
DIRS64 r0, r35, r35, r33
DIRS64 r0, r35, r34, r33
ADD64 r1, r35, r32
JMP :1
0: CP r1, r34
@ -118,16 +114,16 @@ rect_line:
0: LD r34, r254, 8a, 8h
LD r35, r254, 0a, 8h
4: LD r36, r254, 8a, 8h
LD r37, r254, 16a, 8h
ADD64 r36, r36, r37
JNE r34, r36, :2
LD r38, r254, 16a, 8h
ADD64 r37, r36, r38
JNE r34, r37, :2
JMP :3
2: LI64 r36, 1d
LI64 r37, 10d
ADD64 r36, r36, r37
LI64 r37, 1d
LI64 r38, 2d
ADD64 r36, r37, r38
2: LI64 r37, 1d
LI64 r38, 10d
ADD64 r37, r37, r38
LI64 r38, 1d
LI64 r36, 2d
ADD64 r37, r38, r36
ADDI64 r34, r34, 1d
JMP :4
3: ADDI64 r33, r33, 1d
@ -156,6 +152,6 @@ line:
2: LD r31, r254, 48a, 32h
ADDI64 r254, r254, 80d
JALA r0, r31, 0a
code size: 1416
code size: 1404
ret: 0
status: Ok(())

View file

@ -16,14 +16,13 @@ integer_range:
LI64 r2, 3d
LI64 r3, 4d
ECA
CP r34, r1
SUB64 r33, r33, r32
ADDI64 r33, r33, 1d
DIRU64 r0, r34, r34, r33
DIRU64 r0, r34, r1, r33
ADD64 r1, r34, r32
LD r31, r254, 0a, 32h
ADDI64 r254, r254, 32d
JALA r0, r31, 0a
code size: 214
code size: 211
ret: 42
status: Ok(())

View file

@ -15,8 +15,7 @@ fib:
2: LI64 r35, 0d
JNE r32, r35, :0
JMP :1
0: CP r35, r33
ADD64 r35, r35, r34
0: ADD64 r35, r33, r34
CP r33, r34
CP r34, r35
ADDI64 r32, r32, -1d
@ -25,6 +24,6 @@ fib:
LD r31, r254, 0a, 40h
ADDI64 r254, r254, 40d
JALA r0, r31, 0a
code size: 218
code size: 215
ret: 55
status: Ok(())

View file

@ -10,7 +10,7 @@ main:
JAL r31, r0, :drop
LI64 r33, 0d
LD r34, r32, 0a, 8h
ADDI64 r34, r1, -2d
ADDI64 r1, r34, -2d
LD r31, r254, 8a, 32h
ADDI64 r254, r254, 40d
JALA r0, r31, 0a

View file

@ -43,8 +43,7 @@ request_page:
ST r31, r254, 0a, 32h
CP r32, r2
LRA r33, r0, :"\0\u{1}xxxxxxxx"
CP r34, r33
ADDI64 r34, r34, 1d
ADDI64 r34, r33, 1d
ST r32, r34, 0a, 1h
LI64 r2, 3d
LI64 r3, 2d
@ -54,6 +53,6 @@ request_page:
LD r31, r254, 0a, 32h
ADDI64 r254, r254, 32d
JALA r0, r31, 0a
code size: 443
code size: 440
ret: 42
status: Ok(())

View file

@ -28,8 +28,7 @@ fib_iter:
2: LI64 r35, 0d
JNE r32, r35, :0
JMP :1
0: CP r35, r33
ADD64 r35, r35, r34
0: ADD64 r35, r33, r34
CP r33, r34
CP r34, r35
ADDI64 r32, r32, -1d
@ -44,13 +43,11 @@ fib:
CP r32, r2
LI64 r33, 2d
JLTS r32, r33, :0
CP r33, r32
ADDI64 r33, r33, -1d
ADDI64 r33, r32, -1d
CP r2, r33
JAL r31, r0, :fib
CP r33, r1
CP r34, r32
ADDI64 r34, r34, -2d
ADDI64 r34, r32, -2d
CP r2, r34
JAL r31, r0, :fib
CP r34, r1
@ -60,6 +57,6 @@ fib:
1: LD r31, r254, 0a, 32h
ADDI64 r254, r254, 32d
JALA r0, r31, 0a
code size: 464
code size: 455
ret: 0
status: Ok(())