more oportunities to reduce register copies
This commit is contained in:
parent
b51f964cae
commit
d64fa7e1f9
|
@ -2209,6 +2209,8 @@ impl Codegen {
|
||||||
},
|
},
|
||||||
left.loc,
|
left.loc,
|
||||||
)
|
)
|
||||||
|
} else if left.loc.is_ref() {
|
||||||
|
(self.loc_to_reg(&left.loc, lsize), dbg!(self.ci.regs.allocate()), left.loc)
|
||||||
} else {
|
} else {
|
||||||
let lhs = self.loc_to_reg(left.loc, lsize);
|
let lhs = self.loc_to_reg(left.loc, lsize);
|
||||||
(lhs.as_ref(), lhs, Loc::default())
|
(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(op_fn(dst.get(), lhs.get(), rhs.get()));
|
||||||
self.output.emit(cmpui(dst.get(), dst.get(), against));
|
self.output.emit(cmpui(dst.get(), dst.get(), against));
|
||||||
if matches!(op, T::Eq | T::Lt | T::Gt) {
|
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);
|
self.ci.regs.free(lhs);
|
||||||
|
@ -2690,7 +2692,7 @@ impl Codegen {
|
||||||
}
|
}
|
||||||
|
|
||||||
def_op!(basic_op | a, b, c | a, b, c as _);
|
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 {
|
let ops = match op {
|
||||||
T::Add => basic_op!(addi8, addi16, addi32, addi64),
|
T::Add => basic_op!(addi8, addi16, addi32, addi64),
|
||||||
|
|
|
@ -6,6 +6,6 @@ main:
|
||||||
LD r31, r254, 0a, 16h
|
LD r31, r254, 0a, 16h
|
||||||
ADDI64 r254, r254, 16d
|
ADDI64 r254, r254, 16d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
code size: 239
|
code size: 236
|
||||||
ret: 50
|
ret: 50
|
||||||
status: Ok(())
|
status: Ok(())
|
||||||
|
|
|
@ -34,21 +34,21 @@ main:
|
||||||
JMP :1
|
JMP :1
|
||||||
2: CP r33, r0
|
2: CP r33, r0
|
||||||
LD r33, r254, 4a, 4h
|
LD r33, r254, 4a, 4h
|
||||||
CP r32, r0
|
CP r34, r0
|
||||||
LD r32, r254, 8a, 4h
|
LD r34, r254, 8a, 4h
|
||||||
ADD32 r33, r33, r32
|
ADD32 r32, r33, r34
|
||||||
CP r32, r0
|
CP r34, r0
|
||||||
LD r32, r254, 0a, 1h
|
LD r34, r254, 0a, 1h
|
||||||
ADD32 r33, r33, r32
|
ADD32 r32, r32, r34
|
||||||
CP r32, r0
|
CP r34, r0
|
||||||
LD r32, r254, 1a, 1h
|
LD r34, r254, 1a, 1h
|
||||||
ADD32 r33, r33, r32
|
ADD32 r32, r32, r34
|
||||||
CP r32, r0
|
CP r34, r0
|
||||||
LD r32, r254, 2a, 1h
|
LD r34, r254, 2a, 1h
|
||||||
ADD32 r33, r33, r32
|
ADD32 r32, r32, r34
|
||||||
CP r32, r0
|
CP r34, r0
|
||||||
LD r32, r254, 3a, 1h
|
LD r34, r254, 3a, 1h
|
||||||
ADD32 r1, r33, r32
|
ADD32 r1, r32, r34
|
||||||
1: LD r31, r254, 12a, 32h
|
1: LD r31, r254, 12a, 32h
|
||||||
ADDI64 r254, r254, 44d
|
ADDI64 r254, r254, 44d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
|
|
|
@ -18,19 +18,19 @@ main:
|
||||||
ADDI64 r254, r254, 48d
|
ADDI64 r254, r254, 48d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
deinit:
|
deinit:
|
||||||
ADDI64 r254, r254, -24d
|
ADDI64 r254, r254, -32d
|
||||||
ST r31, r254, 0a, 24h
|
ST r31, r254, 0a, 32h
|
||||||
CP r32, r2
|
CP r32, r2
|
||||||
LD r2, r32, 0a, 8h
|
LD r2, r32, 0a, 8h
|
||||||
LD r33, r32, 16a, 8h
|
LD r33, r32, 16a, 8h
|
||||||
MULI64 r33, r33, 8d
|
MULI64 r34, r33, 8d
|
||||||
CP r3, r33
|
CP r3, r34
|
||||||
LI64 r4, 8d
|
LI64 r4, 8d
|
||||||
JAL r31, r0, :free
|
JAL r31, r0, :free
|
||||||
CP r1, r32
|
CP r1, r32
|
||||||
JAL r31, r0, :new
|
JAL r31, r0, :new
|
||||||
LD r31, r254, 0a, 24h
|
LD r31, r254, 0a, 32h
|
||||||
ADDI64 r254, r254, 24d
|
ADDI64 r254, r254, 32d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
free:
|
free:
|
||||||
ADDI64 r254, r254, -40d
|
ADDI64 r254, r254, -40d
|
||||||
|
@ -62,10 +62,10 @@ push:
|
||||||
ST r34, r32, 16a, 8h
|
ST r34, r32, 16a, 8h
|
||||||
JMP :2
|
JMP :2
|
||||||
1: LD r34, r32, 16a, 8h
|
1: LD r34, r32, 16a, 8h
|
||||||
MULI64 r34, r34, 2d
|
MULI64 r35, r34, 2d
|
||||||
ST r34, r32, 16a, 8h
|
ST r35, r32, 16a, 8h
|
||||||
2: LD r34, r32, 16a, 8h
|
2: LD r35, r32, 16a, 8h
|
||||||
MULI64 r34, r34, 8d
|
MULI64 r34, r35, 8d
|
||||||
CP r2, r34
|
CP r2, r34
|
||||||
LI64 r3, 8d
|
LI64 r3, 8d
|
||||||
JAL r31, r0, :malloc
|
JAL r31, r0, :malloc
|
||||||
|
@ -77,37 +77,37 @@ push:
|
||||||
3: LD r35, r32, 0a, 8h
|
3: LD r35, r32, 0a, 8h
|
||||||
CP r36, r34
|
CP r36, r34
|
||||||
LD r37, r32, 0a, 8h
|
LD r37, r32, 0a, 8h
|
||||||
LD r38, r32, 8a, 8h
|
LD r39, r32, 8a, 8h
|
||||||
MULI64 r38, r38, 8d
|
MULI64 r39, r39, 8d
|
||||||
ADD64 r37, r37, r38
|
ADD64 r38, r37, r39
|
||||||
7: JNE r35, r37, :5
|
7: JNE r35, r38, :5
|
||||||
JMP :6
|
JMP :6
|
||||||
5: CP r38, r36
|
5: CP r39, r36
|
||||||
CP r39, r35
|
CP r37, r35
|
||||||
BMC r39, r38, 8h
|
BMC r37, r39, 8h
|
||||||
ADDI64 r35, r35, 8d
|
ADDI64 r35, r35, 8d
|
||||||
ADDI64 r36, r36, 8d
|
ADDI64 r36, r36, 8d
|
||||||
JMP :7
|
JMP :7
|
||||||
6: LD r38, r32, 8a, 8h
|
6: LD r39, r32, 8a, 8h
|
||||||
LI64 r39, 0d
|
LI64 r37, 0d
|
||||||
JEQ r38, r39, :8
|
JEQ r39, r37, :8
|
||||||
LD r2, r32, 0a, 8h
|
LD r2, r32, 0a, 8h
|
||||||
LD r39, r32, 8a, 8h
|
LD r37, r32, 8a, 8h
|
||||||
MULI64 r39, r39, 8d
|
MULI64 r39, r37, 8d
|
||||||
CP r3, r39
|
CP r3, r39
|
||||||
LI64 r4, 8d
|
LI64 r4, 8d
|
||||||
JAL r31, r0, :free
|
JAL r31, r0, :free
|
||||||
8: ST r34, r32, 0a, 8h
|
8: ST r34, r32, 0a, 8h
|
||||||
0: LD r34, r32, 0a, 8h
|
0: LD r34, r32, 0a, 8h
|
||||||
LD r39, r32, 8a, 8h
|
LD r37, r32, 8a, 8h
|
||||||
MULI64 r39, r39, 8d
|
MULI64 r37, r37, 8d
|
||||||
ADD64 r34, r34, r39
|
ADD64 r39, r34, r37
|
||||||
CP r39, r34
|
CP r37, r39
|
||||||
ST r33, r39, 0a, 8h
|
ST r33, r37, 0a, 8h
|
||||||
LD r39, r32, 8a, 8h
|
LD r37, r32, 8a, 8h
|
||||||
ADDI64 r39, r39, 1d
|
ADDI64 r37, r37, 1d
|
||||||
ST r39, r32, 8a, 8h
|
ST r37, r32, 8a, 8h
|
||||||
CP r1, r34
|
CP r1, r39
|
||||||
4: LD r31, r254, 0a, 72h
|
4: LD r31, r254, 0a, 72h
|
||||||
ADDI64 r254, r254, 72d
|
ADDI64 r254, r254, 72d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
|
|
|
@ -11,6 +11,6 @@ main:
|
||||||
LD r31, r254, 0a, 32h
|
LD r31, r254, 0a, 32h
|
||||||
ADDI64 r254, r254, 32d
|
ADDI64 r254, r254, 32d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
code size: 299
|
code size: 296
|
||||||
ret: 55
|
ret: 55
|
||||||
status: Ok(())
|
status: Ok(())
|
||||||
|
|
|
@ -14,8 +14,7 @@ fib:
|
||||||
JGTS r32, r33, :0
|
JGTS r32, r33, :0
|
||||||
LI64 r1, 1d
|
LI64 r1, 1d
|
||||||
JMP :1
|
JMP :1
|
||||||
0: CP r33, r32
|
0: ADDI64 r33, r32, -1d
|
||||||
ADDI64 r33, r33, -1d
|
|
||||||
CP r2, r33
|
CP r2, r33
|
||||||
JAL r31, r0, :fib
|
JAL r31, r0, :fib
|
||||||
CP r33, r1
|
CP r33, r1
|
||||||
|
@ -27,6 +26,6 @@ fib:
|
||||||
1: LD r31, r254, 0a, 24h
|
1: LD r31, r254, 0a, 24h
|
||||||
ADDI64 r254, r254, 24d
|
ADDI64 r254, r254, 24d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
code size: 231
|
code size: 228
|
||||||
ret: 55
|
ret: 55
|
||||||
status: Ok(())
|
status: Ok(())
|
||||||
|
|
|
@ -4,7 +4,7 @@ main:
|
||||||
LI64 r33, 1d
|
LI64 r33, 1d
|
||||||
ADDI64 r33, r33, 2d
|
ADDI64 r33, r33, 2d
|
||||||
ADDI64 r32, r33, 3d
|
ADDI64 r32, r33, 3d
|
||||||
ADDI64 r32, r1, -6d
|
ADDI64 r1, r32, -6d
|
||||||
LD r31, r254, 0a, 24h
|
LD r31, r254, 0a, 24h
|
||||||
ADDI64 r254, r254, 24d
|
ADDI64 r254, r254, 24d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
|
|
|
@ -57,11 +57,10 @@ example:
|
||||||
CMPUI r35, r35, 0d
|
CMPUI r35, r35, 0d
|
||||||
OR r34, r34, r35
|
OR r34, r34, r35
|
||||||
JEQ r34, r0, :0
|
JEQ r34, r0, :0
|
||||||
CP r34, r33
|
|
||||||
LI64 r35, 1024d
|
LI64 r35, 1024d
|
||||||
ADDI64 r35, r35, 0d
|
ADDI64 r35, r35, 0d
|
||||||
ADDI64 r35, r35, 1d
|
ADDI64 r35, r35, 1d
|
||||||
DIRS64 r0, r34, r34, r35
|
DIRS64 r0, r34, r33, r35
|
||||||
ADDI64 r32, r34, 0d
|
ADDI64 r32, r34, 0d
|
||||||
JMP :1
|
JMP :1
|
||||||
0: CP r32, r33
|
0: CP r32, r33
|
||||||
|
@ -83,20 +82,17 @@ integer:
|
||||||
LI64 r3, 4d
|
LI64 r3, 4d
|
||||||
ECA
|
ECA
|
||||||
CP r34, r1
|
CP r34, r1
|
||||||
CP r35, r32
|
|
||||||
LI64 r36, 0d
|
LI64 r36, 0d
|
||||||
CMPS r35, r35, r36
|
CMPS r35, r32, r36
|
||||||
CMPUI r35, r35, 0d
|
CMPUI r35, r35, 0d
|
||||||
CP r36, r33
|
|
||||||
LI64 r37, 0d
|
LI64 r37, 0d
|
||||||
CMPS r36, r36, r37
|
CMPS r36, r33, r37
|
||||||
CMPUI r36, r36, 0d
|
CMPUI r36, r36, 0d
|
||||||
OR r35, r35, r36
|
OR r35, r35, r36
|
||||||
JEQ r35, r0, :0
|
JEQ r35, r0, :0
|
||||||
CP r35, r34
|
|
||||||
SUB64 r33, r33, r32
|
SUB64 r33, r33, r32
|
||||||
ADDI64 r33, r33, 1d
|
ADDI64 r33, r33, 1d
|
||||||
DIRS64 r0, r35, r35, r33
|
DIRS64 r0, r35, r34, r33
|
||||||
ADD64 r1, r35, r32
|
ADD64 r1, r35, r32
|
||||||
JMP :1
|
JMP :1
|
||||||
0: CP r1, r34
|
0: CP r1, r34
|
||||||
|
@ -118,16 +114,16 @@ rect_line:
|
||||||
0: LD r34, r254, 8a, 8h
|
0: LD r34, r254, 8a, 8h
|
||||||
LD r35, r254, 0a, 8h
|
LD r35, r254, 0a, 8h
|
||||||
4: LD r36, r254, 8a, 8h
|
4: LD r36, r254, 8a, 8h
|
||||||
LD r37, r254, 16a, 8h
|
LD r38, r254, 16a, 8h
|
||||||
ADD64 r36, r36, r37
|
ADD64 r37, r36, r38
|
||||||
JNE r34, r36, :2
|
JNE r34, r37, :2
|
||||||
JMP :3
|
JMP :3
|
||||||
2: LI64 r36, 1d
|
2: LI64 r37, 1d
|
||||||
LI64 r37, 10d
|
LI64 r38, 10d
|
||||||
ADD64 r36, r36, r37
|
ADD64 r37, r37, r38
|
||||||
LI64 r37, 1d
|
LI64 r38, 1d
|
||||||
LI64 r38, 2d
|
LI64 r36, 2d
|
||||||
ADD64 r36, r37, r38
|
ADD64 r37, r38, r36
|
||||||
ADDI64 r34, r34, 1d
|
ADDI64 r34, r34, 1d
|
||||||
JMP :4
|
JMP :4
|
||||||
3: ADDI64 r33, r33, 1d
|
3: ADDI64 r33, r33, 1d
|
||||||
|
@ -156,6 +152,6 @@ line:
|
||||||
2: LD r31, r254, 48a, 32h
|
2: LD r31, r254, 48a, 32h
|
||||||
ADDI64 r254, r254, 80d
|
ADDI64 r254, r254, 80d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
code size: 1416
|
code size: 1404
|
||||||
ret: 0
|
ret: 0
|
||||||
status: Ok(())
|
status: Ok(())
|
||||||
|
|
|
@ -16,14 +16,13 @@ integer_range:
|
||||||
LI64 r2, 3d
|
LI64 r2, 3d
|
||||||
LI64 r3, 4d
|
LI64 r3, 4d
|
||||||
ECA
|
ECA
|
||||||
CP r34, r1
|
|
||||||
SUB64 r33, r33, r32
|
SUB64 r33, r33, r32
|
||||||
ADDI64 r33, r33, 1d
|
ADDI64 r33, r33, 1d
|
||||||
DIRU64 r0, r34, r34, r33
|
DIRU64 r0, r34, r1, r33
|
||||||
ADD64 r1, r34, r32
|
ADD64 r1, r34, r32
|
||||||
LD r31, r254, 0a, 32h
|
LD r31, r254, 0a, 32h
|
||||||
ADDI64 r254, r254, 32d
|
ADDI64 r254, r254, 32d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
code size: 214
|
code size: 211
|
||||||
ret: 42
|
ret: 42
|
||||||
status: Ok(())
|
status: Ok(())
|
||||||
|
|
|
@ -15,8 +15,7 @@ fib:
|
||||||
2: LI64 r35, 0d
|
2: LI64 r35, 0d
|
||||||
JNE r32, r35, :0
|
JNE r32, r35, :0
|
||||||
JMP :1
|
JMP :1
|
||||||
0: CP r35, r33
|
0: ADD64 r35, r33, r34
|
||||||
ADD64 r35, r35, r34
|
|
||||||
CP r33, r34
|
CP r33, r34
|
||||||
CP r34, r35
|
CP r34, r35
|
||||||
ADDI64 r32, r32, -1d
|
ADDI64 r32, r32, -1d
|
||||||
|
@ -25,6 +24,6 @@ fib:
|
||||||
LD r31, r254, 0a, 40h
|
LD r31, r254, 0a, 40h
|
||||||
ADDI64 r254, r254, 40d
|
ADDI64 r254, r254, 40d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
code size: 218
|
code size: 215
|
||||||
ret: 55
|
ret: 55
|
||||||
status: Ok(())
|
status: Ok(())
|
||||||
|
|
|
@ -10,7 +10,7 @@ main:
|
||||||
JAL r31, r0, :drop
|
JAL r31, r0, :drop
|
||||||
LI64 r33, 0d
|
LI64 r33, 0d
|
||||||
LD r34, r32, 0a, 8h
|
LD r34, r32, 0a, 8h
|
||||||
ADDI64 r34, r1, -2d
|
ADDI64 r1, r34, -2d
|
||||||
LD r31, r254, 8a, 32h
|
LD r31, r254, 8a, 32h
|
||||||
ADDI64 r254, r254, 40d
|
ADDI64 r254, r254, 40d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
|
|
|
@ -43,8 +43,7 @@ request_page:
|
||||||
ST r31, r254, 0a, 32h
|
ST r31, r254, 0a, 32h
|
||||||
CP r32, r2
|
CP r32, r2
|
||||||
LRA r33, r0, :"\0\u{1}xxxxxxxx"
|
LRA r33, r0, :"\0\u{1}xxxxxxxx"
|
||||||
CP r34, r33
|
ADDI64 r34, r33, 1d
|
||||||
ADDI64 r34, r34, 1d
|
|
||||||
ST r32, r34, 0a, 1h
|
ST r32, r34, 0a, 1h
|
||||||
LI64 r2, 3d
|
LI64 r2, 3d
|
||||||
LI64 r3, 2d
|
LI64 r3, 2d
|
||||||
|
@ -54,6 +53,6 @@ request_page:
|
||||||
LD r31, r254, 0a, 32h
|
LD r31, r254, 0a, 32h
|
||||||
ADDI64 r254, r254, 32d
|
ADDI64 r254, r254, 32d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
code size: 443
|
code size: 440
|
||||||
ret: 42
|
ret: 42
|
||||||
status: Ok(())
|
status: Ok(())
|
||||||
|
|
|
@ -28,8 +28,7 @@ fib_iter:
|
||||||
2: LI64 r35, 0d
|
2: LI64 r35, 0d
|
||||||
JNE r32, r35, :0
|
JNE r32, r35, :0
|
||||||
JMP :1
|
JMP :1
|
||||||
0: CP r35, r33
|
0: ADD64 r35, r33, r34
|
||||||
ADD64 r35, r35, r34
|
|
||||||
CP r33, r34
|
CP r33, r34
|
||||||
CP r34, r35
|
CP r34, r35
|
||||||
ADDI64 r32, r32, -1d
|
ADDI64 r32, r32, -1d
|
||||||
|
@ -44,13 +43,11 @@ fib:
|
||||||
CP r32, r2
|
CP r32, r2
|
||||||
LI64 r33, 2d
|
LI64 r33, 2d
|
||||||
JLTS r32, r33, :0
|
JLTS r32, r33, :0
|
||||||
CP r33, r32
|
ADDI64 r33, r32, -1d
|
||||||
ADDI64 r33, r33, -1d
|
|
||||||
CP r2, r33
|
CP r2, r33
|
||||||
JAL r31, r0, :fib
|
JAL r31, r0, :fib
|
||||||
CP r33, r1
|
CP r33, r1
|
||||||
CP r34, r32
|
ADDI64 r34, r32, -2d
|
||||||
ADDI64 r34, r34, -2d
|
|
||||||
CP r2, r34
|
CP r2, r34
|
||||||
JAL r31, r0, :fib
|
JAL r31, r0, :fib
|
||||||
CP r34, r1
|
CP r34, r1
|
||||||
|
@ -60,6 +57,6 @@ fib:
|
||||||
1: LD r31, r254, 0a, 32h
|
1: LD r31, r254, 0a, 32h
|
||||||
ADDI64 r254, r254, 32d
|
ADDI64 r254, r254, 32d
|
||||||
JALA r0, r31, 0a
|
JALA r0, r31, 0a
|
||||||
code size: 464
|
code size: 455
|
||||||
ret: 0
|
ret: 0
|
||||||
status: Ok(())
|
status: Ok(())
|
||||||
|
|
Loading…
Reference in a new issue