mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-27 04:18:42 +00:00
Teach the interpreter to read and write memory in the
endianness of the target not of the host. Done by the simple expedient of reversing bytes for primitive types if the host and target endianness don't match. This is correct for integer and pointer types. I don't know if it is correct for floating point types. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45039 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
1 parent
6e959b9afe
commit
8a43e9e5d7
3 files changed
+257
-60
No files matched your search
@@ -0,0 +1,81 @@
|
||||
; RUN: llvm-as < %s -o - | lli -force-interpreter
|
||||
|
||||
target datalayout = "E"
|
||||
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%i = alloca i93
|
||||
store i93 18364758544493064720, i93* %i
|
||||
%i1 = load i93* %i
|
||||
%i2 = shl i93 %i1, 32
|
||||
%i3 = or i93 %i2, 3753679480
|
||||
store i93 %i3, i93* %i
|
||||
%i4 = load i93* %i
|
||||
%C = icmp eq i93 %i3, %i4
|
||||
br i1 %C, label %ok1, label %fail
|
||||
ok1:
|
||||
%b = bitcast i93* %i to [12 x i8]*
|
||||
%b0 = getelementptr [12 x i8]* %b, i32 0, i32 0
|
||||
%v0 = load i8* %b0
|
||||
%c0 = icmp eq i8 %v0, 30
|
||||
br i1 %c0, label %ok2, label %fail
|
||||
ok2:
|
||||
%b1 = getelementptr [12 x i8]* %b, i32 0, i32 1
|
||||
%v1 = load i8* %b1
|
||||
%c1 = icmp eq i8 %v1, 220
|
||||
br i1 %c1, label %ok3, label %fail
|
||||
ok3:
|
||||
%b2 = getelementptr [12 x i8]* %b, i32 0, i32 2
|
||||
%v2 = load i8* %b2
|
||||
%c2 = icmp eq i8 %v2, 186
|
||||
br i1 %c2, label %ok4, label %fail
|
||||
ok4:
|
||||
%b3 = getelementptr [12 x i8]* %b, i32 0, i32 3
|
||||
%v3 = load i8* %b3
|
||||
%c3 = icmp eq i8 %v3, 152
|
||||
br i1 %c3, label %ok5, label %fail
|
||||
ok5:
|
||||
%b4 = getelementptr [12 x i8]* %b, i32 0, i32 4
|
||||
%v4 = load i8* %b4
|
||||
%c4 = icmp eq i8 %v4, 118
|
||||
br i1 %c4, label %ok6, label %fail
|
||||
ok6:
|
||||
%b5 = getelementptr [12 x i8]* %b, i32 0, i32 5
|
||||
%v5 = load i8* %b5
|
||||
%c5 = icmp eq i8 %v5, 84
|
||||
br i1 %c5, label %ok7, label %fail
|
||||
ok7:
|
||||
%b6 = getelementptr [12 x i8]* %b, i32 0, i32 6
|
||||
%v6 = load i8* %b6
|
||||
%c6 = icmp eq i8 %v6, 50
|
||||
br i1 %c6, label %ok8, label %fail
|
||||
ok8:
|
||||
%b7 = getelementptr [12 x i8]* %b, i32 0, i32 7
|
||||
%v7 = load i8* %b7
|
||||
%c7 = icmp eq i8 %v7, 16
|
||||
br i1 %c7, label %ok9, label %fail
|
||||
ok9:
|
||||
%b8 = getelementptr [12 x i8]* %b, i32 0, i32 8
|
||||
%v8 = load i8* %b8
|
||||
%c8 = icmp eq i8 %v8, 223
|
||||
br i1 %c8, label %okA, label %fail
|
||||
okA:
|
||||
%b9 = getelementptr [12 x i8]* %b, i32 0, i32 9
|
||||
%v9 = load i8* %b9
|
||||
%c9 = icmp eq i8 %v9, 188
|
||||
br i1 %c9, label %okB, label %fail
|
||||
okB:
|
||||
%bA = getelementptr [12 x i8]* %b, i32 0, i32 10
|
||||
%vA = load i8* %bA
|
||||
%cA = icmp eq i8 %vA, 154
|
||||
br i1 %cA, label %okC, label %fail
|
||||
okC:
|
||||
%bB = getelementptr [12 x i8]* %b, i32 0, i32 11
|
||||
%vB = load i8* %bB
|
||||
%cB = icmp eq i8 %vB, 120
|
||||
br i1 %cB, label %okD, label %fail
|
||||
okD:
|
||||
ret i32 0
|
||||
fail:
|
||||
ret i32 1
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
; RUN: llvm-as < %s -o - | lli -force-interpreter
|
||||
|
||||
target datalayout = "e"
|
||||
|
||||
define i32 @main() {
|
||||
entry:
|
||||
%i = alloca i93
|
||||
store i93 18364758544493064720, i93* %i
|
||||
%i1 = load i93* %i
|
||||
%i2 = shl i93 %i1, 32
|
||||
%i3 = or i93 %i2, 3753679480
|
||||
store i93 %i3, i93* %i
|
||||
%i4 = load i93* %i
|
||||
%C = icmp eq i93 %i3, %i4
|
||||
br i1 %C, label %ok1, label %fail
|
||||
ok1:
|
||||
%b = bitcast i93* %i to [12 x i8]*
|
||||
%b0 = getelementptr [12 x i8]* %b, i32 0, i32 0
|
||||
%v0 = load i8* %b0
|
||||
%c0 = icmp eq i8 %v0, 120
|
||||
br i1 %c0, label %ok2, label %fail
|
||||
ok2:
|
||||
%b1 = getelementptr [12 x i8]* %b, i32 0, i32 1
|
||||
%v1 = load i8* %b1
|
||||
%c1 = icmp eq i8 %v1, 154
|
||||
br i1 %c1, label %ok3, label %fail
|
||||
ok3:
|
||||
%b2 = getelementptr [12 x i8]* %b, i32 0, i32 2
|
||||
%v2 = load i8* %b2
|
||||
%c2 = icmp eq i8 %v2, 188
|
||||
br i1 %c2, label %ok4, label %fail
|
||||
ok4:
|
||||
%b3 = getelementptr [12 x i8]* %b, i32 0, i32 3
|
||||
%v3 = load i8* %b3
|
||||
%c3 = icmp eq i8 %v3, 223
|
||||
br i1 %c3, label %ok5, label %fail
|
||||
ok5:
|
||||
%b4 = getelementptr [12 x i8]* %b, i32 0, i32 4
|
||||
%v4 = load i8* %b4
|
||||
%c4 = icmp eq i8 %v4, 16
|
||||
br i1 %c4, label %ok6, label %fail
|
||||
ok6:
|
||||
%b5 = getelementptr [12 x i8]* %b, i32 0, i32 5
|
||||
%v5 = load i8* %b5
|
||||
%c5 = icmp eq i8 %v5, 50
|
||||
br i1 %c5, label %ok7, label %fail
|
||||
ok7:
|
||||
%b6 = getelementptr [12 x i8]* %b, i32 0, i32 6
|
||||
%v6 = load i8* %b6
|
||||
%c6 = icmp eq i8 %v6, 84
|
||||
br i1 %c6, label %ok8, label %fail
|
||||
ok8:
|
||||
%b7 = getelementptr [12 x i8]* %b, i32 0, i32 7
|
||||
%v7 = load i8* %b7
|
||||
%c7 = icmp eq i8 %v7, 118
|
||||
br i1 %c7, label %ok9, label %fail
|
||||
ok9:
|
||||
%b8 = getelementptr [12 x i8]* %b, i32 0, i32 8
|
||||
%v8 = load i8* %b8
|
||||
%c8 = icmp eq i8 %v8, 152
|
||||
br i1 %c8, label %okA, label %fail
|
||||
okA:
|
||||
%b9 = getelementptr [12 x i8]* %b, i32 0, i32 9
|
||||
%v9 = load i8* %b9
|
||||
%c9 = icmp eq i8 %v9, 186
|
||||
br i1 %c9, label %okB, label %fail
|
||||
okB:
|
||||
%bA = getelementptr [12 x i8]* %b, i32 0, i32 10
|
||||
%vA = load i8* %bA
|
||||
%cA = icmp eq i8 %vA, 220
|
||||
br i1 %cA, label %okC, label %fail
|
||||
okC:
|
||||
%bB = getelementptr [12 x i8]* %b, i32 0, i32 11
|
||||
%vB = load i8* %bB
|
||||
%cB = icmp eq i8 %vB, 30
|
||||
br i1 %cB, label %okD, label %fail
|
||||
okD:
|
||||
ret i32 0
|
||||
fail:
|
||||
ret i32 1
|
||||
}
|
||||
Reference in new issue
Block a user