new blit instruction
This commit is contained in:
parent
15e25a61b3
commit
26c1c30b7d
16 changed files with 398 additions and 103 deletions
75
test/load2.ssa
Normal file
75
test/load2.ssa
Normal file
|
@ -0,0 +1,75 @@
|
|||
# blit & load elimination
|
||||
|
||||
export
|
||||
function $f() {
|
||||
@start
|
||||
%x =l alloc4 12
|
||||
%y =l alloc4 12
|
||||
|
||||
%x1 =l add 1, %x
|
||||
%x2 =l add 1, %x1
|
||||
%x3 =l add 1, %x2
|
||||
%x4 =l add 1, %x3
|
||||
%x5 =l add 1, %x4
|
||||
%x6 =l add 1, %x5
|
||||
%x7 =l add 1, %x6
|
||||
%x8 =l add 1, %x7
|
||||
%x9 =l add 1, %x8
|
||||
%xa =l add 1, %x9
|
||||
%xb =l add 1, %xa
|
||||
|
||||
%y1 =l add 1, %y
|
||||
%y4 =l add 4, %y
|
||||
|
||||
storew 287454020, %x4 # 0x11223344
|
||||
storew 1432778632, %y # 0x55667788
|
||||
blit %y, %x5, 1
|
||||
%n =w load %x4
|
||||
call $px(w %n) # 0x11228844
|
||||
|
||||
storew 287454020, %x4 # 0x11223344
|
||||
storew 1432778632, %y # 0x55667788
|
||||
blit %y, %x5, 2
|
||||
%n =w load %x4
|
||||
call $px(w %n) # 0x11778844
|
||||
|
||||
storew 287454020, %x4 # 0x11223344
|
||||
storew 1432778632, %y # 0x55667788
|
||||
blit %y, %x5, 4
|
||||
%n =w load %x4
|
||||
call $px(w %n) # 0x66778844
|
||||
|
||||
storew 287454020, %x4 # 0x11223344
|
||||
storew 1432778632, %y # 0x55667788
|
||||
blit %y, %x2, 4
|
||||
%n =w load %x4
|
||||
call $px(w %n) # 0x11225566
|
||||
|
||||
storew 287454020, %x4 # 0x11223344
|
||||
storew 0, %y
|
||||
storew 1432778632, %y4 # 0x55667788
|
||||
blit %y1, %x2, 7
|
||||
%n =w load %x4
|
||||
call $px(w %n) # 0x66778800
|
||||
|
||||
ret
|
||||
}
|
||||
|
||||
# >>> driver
|
||||
# #include <stdio.h>
|
||||
# void px(unsigned n) {
|
||||
# printf("0x%08x\n", n);
|
||||
# }
|
||||
# int main() {
|
||||
# extern void f(void);
|
||||
# f();
|
||||
# }
|
||||
# <<<
|
||||
|
||||
# >>> output
|
||||
# 0x11228844
|
||||
# 0x11778844
|
||||
# 0x66778844
|
||||
# 0x11225566
|
||||
# 0x66778800
|
||||
# <<<
|
35
test/mem1.ssa
Normal file
35
test/mem1.ssa
Normal file
|
@ -0,0 +1,35 @@
|
|||
type :i3 = { w 3 }
|
||||
|
||||
export
|
||||
function :i3 $blit() {
|
||||
@start
|
||||
%l0 =l alloc4 12
|
||||
%l1 =l alloc4 12
|
||||
|
||||
storew 287454020, %l0
|
||||
%l04 =l add %l0, 4
|
||||
storew 1432778632, %l04
|
||||
%l08 =l add %l0, 8
|
||||
storew 2578103244, %l08
|
||||
|
||||
# we expect that %l0 and %l1
|
||||
# are coalesced and the blit
|
||||
# goes backwards
|
||||
%l11 =l add %l1, 1
|
||||
blit %l0, %l11, 11
|
||||
|
||||
storeb 221, %l1
|
||||
|
||||
ret %l1
|
||||
}
|
||||
|
||||
# >>> driver
|
||||
# struct i3 { int a, b, c; };
|
||||
# extern struct i3 blit();
|
||||
# int main() {
|
||||
# struct i3 s = blit();
|
||||
# return !(s.a == 0x223344dd
|
||||
# && s.b == 0x66778811
|
||||
# && s.c == 0xaabbcc55);
|
||||
# }
|
||||
# <<<
|
Loading…
Add table
Add a link
Reference in a new issue