diff options
author | Duncan Sands <baldrick@free.fr> | 2007-12-14 19:38:31 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2007-12-14 19:38:31 +0000 |
commit | 8a43e9e5d751ab827ba3ff0cf862787d3263a484 (patch) | |
tree | 9d99bab072a969763f544d05a9ff7cb572e97897 /test/ExecutionEngine | |
parent | 6e959b9afe0daa94cc9621ca0c7dab75e2a7bf43 (diff) |
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
Diffstat (limited to 'test/ExecutionEngine')
-rw-r--r-- | test/ExecutionEngine/2007-12-14-BigEndian.ll | 81 | ||||
-rw-r--r-- | test/ExecutionEngine/2007-12-14-LittleEndian.ll | 81 |
2 files changed, 162 insertions, 0 deletions
diff --git a/test/ExecutionEngine/2007-12-14-BigEndian.ll b/test/ExecutionEngine/2007-12-14-BigEndian.ll new file mode 100644 index 0000000000..68059fd59a --- /dev/null +++ b/test/ExecutionEngine/2007-12-14-BigEndian.ll @@ -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 +} diff --git a/test/ExecutionEngine/2007-12-14-LittleEndian.ll b/test/ExecutionEngine/2007-12-14-LittleEndian.ll new file mode 100644 index 0000000000..afaed5148b --- /dev/null +++ b/test/ExecutionEngine/2007-12-14-LittleEndian.ll @@ -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 +} |