diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 10:54:16 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-27 10:54:16 +0000 |
commit | 485f6ecd453d8a2fd8b9b9fadea03159d8b50797 (patch) | |
tree | 32451fa3cdd9321fb2591fada9891b2cb70a9cd1 /asm-tests | |
parent | Initial commit. (diff) | |
download | grub2-upstream.tar.xz grub2-upstream.zip |
Adding upstream version 2.06.upstream/2.06upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'asm-tests')
-rw-r--r-- | asm-tests/arm.S | 20 | ||||
-rw-r--r-- | asm-tests/i386-pc.S | 18 | ||||
-rw-r--r-- | asm-tests/i386.S | 4 | ||||
-rw-r--r-- | asm-tests/mips.S | 11 | ||||
-rw-r--r-- | asm-tests/powerpc.S | 8 | ||||
-rw-r--r-- | asm-tests/sparc64.S | 9 |
6 files changed, 70 insertions, 0 deletions
diff --git a/asm-tests/arm.S b/asm-tests/arm.S new file mode 100644 index 0000000..97c2546 --- /dev/null +++ b/asm-tests/arm.S @@ -0,0 +1,20 @@ +/* on arm clang doesn't support .arch directive */ + + .text + .syntax unified + +#if !defined (__thumb2__) + .arch armv7a + .arm +#else + .arch armv7 + .thumb +#endif + mcr p15, 0, r11, c7, c14, 2 + + /* clang restricts access to dsb/isb despite .arch */ + dsb + isb + + + diff --git a/asm-tests/i386-pc.S b/asm-tests/i386-pc.S new file mode 100644 index 0000000..d037744 --- /dev/null +++ b/asm-tests/i386-pc.S @@ -0,0 +1,18 @@ +/* on x86 old clang doesn't support .code16 + newer clang supports it but creates 6-byte jumps instead of 3-byte ones + which makes us go over boot sector size. + Starting with 3.9 clang emits 3-byte jumps but still creates 8-bytes movl + instead of 5-bytes, so code overflows into data. */ + + .code16 + jmp far + .org 4 + jmp nearer + .org 6 + movl nearer, %ebx + .org 11 + .space 100 +nearer: + .space 200 +far: + .byte 0 diff --git a/asm-tests/i386.S b/asm-tests/i386.S new file mode 100644 index 0000000..30adc4f --- /dev/null +++ b/asm-tests/i386.S @@ -0,0 +1,4 @@ +/* on x86 old clang doesn't support .code16 */ + + .code16 + movb %al, %bl diff --git a/asm-tests/mips.S b/asm-tests/mips.S new file mode 100644 index 0000000..1312d47 --- /dev/null +++ b/asm-tests/mips.S @@ -0,0 +1,11 @@ +/* on mips clang doesn't support privilegied instructions, doubleword store/load + and crashes with hand-written assembly + */ + + .set mips3 + sync + ld $t2, 0($t1) + +a: + addiu $t1, $s0, (b - a) +b: nop diff --git a/asm-tests/powerpc.S b/asm-tests/powerpc.S new file mode 100644 index 0000000..396a6cc --- /dev/null +++ b/asm-tests/powerpc.S @@ -0,0 +1,8 @@ +/* clang <= 3.3 doesn't handle most of ppc assembly, not even inline assembly + used by gcrypt */ +/* Cache invalidation loop is a fair test. */ + li 5, 0 +1: icbi 5, 3 + addi 5, 5, 32 + cmpw 5, 4 + blt 1b diff --git a/asm-tests/sparc64.S b/asm-tests/sparc64.S new file mode 100644 index 0000000..03c5fe0 --- /dev/null +++ b/asm-tests/sparc64.S @@ -0,0 +1,9 @@ + .text +1: + /* A small list of examples of what clang doesn't support. */ + clr %o0 + lduw [%o4 + 4], %o4 + and %o6, ~0xff, %o6 + stw %o5, [%o3] + bne,pt %icc, 1b + nop |