Created
April 2, 2016 15:51
-
-
Save beholdnec/82a8d74eac6e5bccebda4e17c52abb64 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Generates ADD #123 | |
define i8 @add(i8 %x) { | |
entry: | |
%result = add i8 %x, 123 | |
ret i8 %result | |
} | |
; Generates ADD 123 | |
define i8 @loadAndAdd(i8 %addend) { | |
entry: | |
%ptr = inttoptr i16 123 to i8* | |
%loaded = load volatile i8, i8* %ptr | |
%result = add i8 %loaded, %addend | |
ret i8 %result | |
} | |
; Generates LDA #123 | |
define i8 @const() { | |
entry: | |
ret i8 123 | |
} | |
; Generates LDA 123 | |
define i8 @load() { | |
entry: | |
%ptr = inttoptr i16 123 to i8* | |
%result = load volatile i8, i8* %ptr | |
ret i8 %result | |
} | |
; Generates STA 123 | |
define void @store(i8 %a) { | |
entry: | |
%ptr = inttoptr i16 123 to i8* | |
store volatile i8 %a, i8* %ptr | |
ret void | |
} | |
define i8 @sum(i8 %a, i8 %b) { | |
entry: | |
%result = add i8 %b, %a | |
ret i8 %result | |
} | |
define i8 @diff(i8 %a, i8 %b) { | |
entry: | |
%result = sub i8 %b, %a | |
ret i8 %result | |
} | |
define i8 @sum3(i8 %a, i8 %b, i8 %c) { | |
entry: | |
%added1 = add i8 %a, %b | |
%result = add i8 %added1, %c | |
ret i8 %result | |
} | |
; return (a + b) - c, add first | |
define i8 @addAndSub_AddFirst(i8 %a, i8 %b, i8 %c) { | |
entry: | |
%added = add i8 %a, %b | |
%result = sub i8 %added, %c | |
ret i8 %result | |
} | |
; return a + (b - c), sub first | |
define i8 @addAndSub_SubFirst(i8 %a, i8 %b, i8 %c) { | |
entry: | |
%sub = sub i8 %b, %c | |
%sum = add i8 %a, %sub | |
ret i8 %sum | |
} | |
define i8 @double(i8 %a) { | |
entry: | |
%result = add i8 %a, %a | |
ret i8 %result | |
} | |
define i8 @triple(i8 %a) { | |
entry: | |
%doubled = add i8 %a, %a | |
%result = add i8 %doubled, %a | |
ret i8 %result | |
} | |
define i8 @quadruple(i8 %a) { | |
entry: | |
%doubled = add i8 %a, %a | |
%result = add i8 %doubled, %doubled | |
ret i8 %result | |
} | |
define i8 @and(i8 %a, i8 %b) { | |
entry: | |
%result = and i8 %a, %b | |
ret i8 %result | |
} | |
define i8 @xor(i8 %a, i8 %b) { | |
entry: | |
%result = xor i8 %a, %b | |
ret i8 %result | |
} | |
define i8 @or(i8 %a, i8 %b) { | |
entry: | |
%result = or i8 %a, %b | |
ret i8 %result | |
} | |
; Should generate: | |
; ADD #1 | |
define i8 @inc_a(i8 %a) { | |
entry: | |
%result = add i8 %a, 1 | |
ret i8 %result | |
} | |
; Should generate: | |
; INX | |
; TXA | |
define i8 @inc_x(i8 %a, i8 %b) { | |
entry: | |
%result = add i8 %b, 1 | |
ret i8 %result | |
} | |
; Should generate: | |
; DEY | |
; TYA | |
define i8 @dec_y(i8 %a, i8 %b, i8 %c) { | |
entry: | |
%result = sub i8 %c, 1 | |
ret i8 %result | |
} | |
define i8 @load_indirect(i16 %p) { | |
entry: | |
%ptr = inttoptr i16 %p to i8* | |
%result = load i8, i8* %ptr | |
ret i8 %result | |
} | |
define void @store16(i16 %p) { | |
entry: | |
%ptr = inttoptr i16 %p to i16* | |
store volatile i16 12345, i16* %ptr | |
ret void | |
} | |
define void @store32(i16 %p) { | |
entry: | |
%ptr = inttoptr i16 %p to i32* | |
store volatile i32 123456789, i32* %ptr | |
ret void | |
} | |
define i16 @ret16() { | |
entry: | |
ret i16 12345 | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment