diff options
| author | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-10 11:07:38 +0200 |
|---|---|---|
| committer | Jan Tuomi <jans.tuomi@gmail.com> | 2023-11-10 11:07:38 +0200 |
| commit | d3abfd22d4f5fff02adaebe28707aea7bd804ba3 (patch) | |
| tree | b1767c2e8e0cfd6f3814c3caee8698a630d89225 /asm/ext_std.py | |
| parent | 5a0e57601a9489d9f56602e0184e722c85ffc310 (diff) | |
Add optimizer, add supported AST nodes
Diffstat (limited to 'asm/ext_std.py')
| -rw-r--r-- | asm/ext_std.py | 24 |
1 files changed, 22 insertions, 2 deletions
diff --git a/asm/ext_std.py b/asm/ext_std.py index 3d87372..fd18953 100644 --- a/asm/ext_std.py +++ b/asm/ext_std.py @@ -12,14 +12,29 @@ def expand_addi(left: str, imm: str, target: str) -> ExpandResult: def expand_subi(left: str, imm: str, target: str) -> ExpandResult: return [["ali", "al_minus", left, imm, target]] +def expand_not(reg: str, target: str) -> ExpandResult: + return [["alr", "al_xor", reg, "0xFFFF", target]] + +def expand_noti(imm: str, target: str) -> ExpandResult: + return [["ali", "al_xor", imm, "0xFFFF", target]] + def expand_and(left: str, right: str, target: str) -> ExpandResult: return [["alr", "al_and", left, right, target]] +def expand_andi(left: str, imm: str, target: str) -> ExpandResult: + return [["ali", "al_and", left, imm, target]] + def expand_or(left: str, right: str, target: str) -> ExpandResult: return [["alr", "al_or", left, right, target]] -def expand_xor(left: str, right: str, target: str) -> ExpandResult: - return [["alr", "al_xor", left, right, target]] +def expand_ori(left: str, imm: str, target: str) -> ExpandResult: + return [["ali", "al_or", left, imm, target]] + +def expand_xor(left: str, imm: str, target: str) -> ExpandResult: + return [["alr", "al_xor", left, imm, target]] + +def expand_xori(left: str, right: str, target: str) -> ExpandResult: + return [["ali", "al_xor", left, right, target]] def expand_sll(left: str, right: str, target: str) -> ExpandResult: return [["alr", "al_sll", left, right, target]] @@ -105,9 +120,14 @@ expansions: OpExpansionDict = { "sub": expand_sub, "addi": expand_addi, "subi": expand_subi, + "not": expand_not, + "noti": expand_noti, "and": expand_and, + "andi": expand_andi, "or": expand_or, + "ori": expand_ori, "xor": expand_xor, + "xori": expand_xori, "sll": expand_sll, "slr": expand_slr, "sar": expand_sar, |
