Skip to content

Instantly share code, notes, and snippets.

@beholdnec
Created April 2, 2016 15:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save beholdnec/82a8d74eac6e5bccebda4e17c52abb64 to your computer and use it in GitHub Desktop.
Save beholdnec/82a8d74eac6e5bccebda4e17c52abb64 to your computer and use it in GitHub Desktop.
; 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