Compare commits
2 Commits
132ed8ed12
...
ab207d982c
Author | SHA1 | Date | |
---|---|---|---|
![]() |
ab207d982c | ||
![]() |
c2bdf555e4 |
@@ -402,8 +402,7 @@ class X86_64Generator(Generator):
|
||||
self.change_variable(var_name, "rax")
|
||||
|
||||
else:
|
||||
self.lines.append("; FUCK\n\t")
|
||||
#raise NotImplementedError(f"A generate method hasn't been made for the \"{node.instruction}\" instruction.")
|
||||
raise NotImplementedError(f"A generate method hasn't been made for the \"{node.instruction}\" instruction.")
|
||||
|
||||
|
||||
|
||||
|
@@ -37,6 +37,7 @@ class Optimizer:
|
||||
else:
|
||||
if p_op != i_op:
|
||||
return False
|
||||
|
||||
return True
|
||||
|
||||
def match_window(self, patterns: List[Instruction], window: List[Instruction]) -> Union[Dict[str, str], None]:
|
||||
@@ -88,6 +89,7 @@ class Optimizer:
|
||||
matched = True
|
||||
break
|
||||
if not matched:
|
||||
#print('next')
|
||||
i += 1
|
||||
|
||||
self.lines = [f"{line.opcode} {', '.join(line.operands)}\n" for line in self.lines]
|
||||
|
@@ -124,13 +124,13 @@ class X86_64Optimizer(Optimizer):
|
||||
|
||||
PeepholeRule(
|
||||
match=[
|
||||
Instruction("mov", ["a", "b"]),
|
||||
Instruction("mov", ["c", "d"]),
|
||||
Instruction("cmp", ["a", "d"])
|
||||
Instruction("mov", ["rax", "y"]),
|
||||
Instruction("mov", ["rbx", "x"]),
|
||||
Instruction("cmp", ["rax", "rbx"])
|
||||
],
|
||||
replace=[
|
||||
Instruction("mov", ["c", "d"]),
|
||||
Instruction("cmp", ["b", "c"])
|
||||
Instruction("mov", ["rax", "y"]),
|
||||
Instruction("cmp", ["rax", "x"])
|
||||
]
|
||||
)
|
||||
]
|
16
out.asm
16
out.asm
@@ -5,15 +5,11 @@ section .text
|
||||
global _start
|
||||
_start:
|
||||
push 0
|
||||
push 1
|
||||
.loop:
|
||||
mov rax, [rsp + 8]
|
||||
add rax, 1
|
||||
mov QWORD [rsp + 8], rax
|
||||
mov rax, 100000000
|
||||
mov rbx, [rsp + 8]
|
||||
cmp rax, rbx
|
||||
jg .loop
|
||||
mov rax, 1000
|
||||
cmp rax, [rsp + 0]
|
||||
setg al
|
||||
movzx rax, al
|
||||
push rax
|
||||
mov rax, 60
|
||||
mov rdi, [rsp + 8]
|
||||
mov rdi, [rsp + 0]
|
||||
syscall
|
||||
|
@@ -1,7 +1,3 @@
|
||||
set &var 0
|
||||
set &cond true
|
||||
@loop
|
||||
add $var 1 &var
|
||||
greater 100000000 $var &cond
|
||||
if $cond %loop
|
||||
end $var
|
||||
greater 1000 $var &cond
|
||||
end $cond
|
Reference in New Issue
Block a user