testsuite, X86, Darwin: Fix bf16 ABI tests for Mach-O/MacOS ABI.
authorIain Sandoe <iain@sandoe.co.uk>
Sat, 3 Dec 2022 20:51:54 +0000 (20:51 +0000)
committerIain Sandoe <iain@sandoe.co.uk>
Tue, 6 Dec 2022 04:59:58 +0000 (04:59 +0000)
These tests have failed since introduction since they assume that the
assembler output is ELF and that the ABI targeted supports the addressing.

For Darwin, Mach-O and ABI we need to make several changes:
1. Use the __USER_LABEL__PREFIX__
2. Remove the use of ELF-specific constructs (.size, .type etc.)
3. We cannot make direct access to common variables in the ABI, so that we
   must move these to BSS.

These changes are made in darwin-specific asm files.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>
gcc/testsuite/ChangeLog:

* gcc.target/x86_64/abi/bf16/abi-bf16.exp: Use separate asm for Darwin.
* gcc.target/x86_64/abi/bf16/m256bf16/abi-bf16-ymm.exp: Likewise.
* gcc.target/x86_64/abi/bf16/m512bf16/abi-bf16-zmm.exp: Likewise.
* gcc.target/x86_64/abi/bf16/args.h: Make xmm_regs, x87_regs extern.
* gcc.target/x86_64/abi/bf16/m256bf16/args.h: Likewise.
* gcc.target/x86_64/abi/bf16/m512bf16/args.h: Likewise.
* gcc.target/x86_64/abi/bf16/asm-support-darwin.S: New file.
* gcc.target/x86_64/abi/bf16/m256bf16/asm-support-darwin.S: New file.
* gcc.target/x86_64/abi/bf16/m512bf16/asm-support-darwin.S: New file.

gcc/testsuite/gcc.target/x86_64/abi/bf16/abi-bf16.exp
gcc/testsuite/gcc.target/x86_64/abi/bf16/args.h
gcc/testsuite/gcc.target/x86_64/abi/bf16/asm-support-darwin.S [new file with mode: 0644]
gcc/testsuite/gcc.target/x86_64/abi/bf16/m256bf16/abi-bf16-ymm.exp
gcc/testsuite/gcc.target/x86_64/abi/bf16/m256bf16/args.h
gcc/testsuite/gcc.target/x86_64/abi/bf16/m256bf16/asm-support-darwin.S [new file with mode: 0644]
gcc/testsuite/gcc.target/x86_64/abi/bf16/m512bf16/abi-bf16-zmm.exp
gcc/testsuite/gcc.target/x86_64/abi/bf16/m512bf16/args.h
gcc/testsuite/gcc.target/x86_64/abi/bf16/m512bf16/asm-support-darwin.S [new file with mode: 0644]

index bd386f2a560b4382c3a2723235825d6c2fe83281..8edab855dd07052c9f3b1740e85755cd316fb9c8 100644 (file)
@@ -36,9 +36,15 @@ set additional_flags "-W -Wall -msse2"
 
 foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] {
     if {[runtest_file_p $runtests $src]} {
-        c-torture-execute [list $src \
-                                $srcdir/$subdir/asm-support.S] \
-                                $additional_flags
+       if { ([istarget *-*-darwin*]) } then {
+           c-torture-execute [list $src \
+                                   $srcdir/$subdir/asm-support-darwin.S] \
+                                   $additional_flags
+       } else {
+            c-torture-execute [list $src \
+                                    $srcdir/$subdir/asm-support.S] \
+                                    $additional_flags
+        }
     }
 }
 
index 11d7e2b3a1caab1ebd852a4c8566857169a105e3..95f9a394f2c3a3e06c4541e83ce7efd56a924d6c 100644 (file)
@@ -42,8 +42,8 @@ typedef union {
 } X87_T;
 extern void (*callthis)(void);
 extern unsigned long long rax,rbx,rcx,rdx,rsi,rdi,rsp,rbp,r8,r9,r10,r11,r12,r13,r14,r15;
-XMM_T xmm_regs[16];
-X87_T x87_regs[8];
+extern XMM_T xmm_regs[16];
+extern X87_T x87_regs[8];
 extern volatile unsigned long long volatile_var;
 extern void snapshot (void);
 extern void snapshot_ret (void);
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/bf16/asm-support-darwin.S b/gcc/testsuite/gcc.target/x86_64/abi/bf16/asm-support-darwin.S
new file mode 100644 (file)
index 0000000..bdaa02f
--- /dev/null
@@ -0,0 +1,97 @@
+       .text
+       .p2align 4,,15
+       .globl _snapshot
+_snapshot:
+LFB3:
+       movq    %rax, _rax(%rip)
+       movq    %rbx, _rbx(%rip)
+       movq    %rcx, _rcx(%rip)
+       movq    %rdx, _rdx(%rip)
+       movq    %rdi, _rdi(%rip)
+       movq    %rsi, _rsi(%rip)
+       movq    %rbp, _rbp(%rip)
+       movq    %rsp, _rsp(%rip)
+       movq    %r8, _r8(%rip)
+       movq    %r9, _r9(%rip)
+       movq    %r10, _r10(%rip)
+       movq    %r11, _r11(%rip)
+       movq    %r12, _r12(%rip)
+       movq    %r13, _r13(%rip)
+       movq    %r14, _r14(%rip)
+       movq    %r15, _r15(%rip)
+       movdqu  %xmm0, _xmm_regs+0(%rip)
+       movdqu  %xmm1, _xmm_regs+16(%rip)
+       movdqu  %xmm2, _xmm_regs+32(%rip)
+       movdqu  %xmm3, _xmm_regs+48(%rip)
+       movdqu  %xmm4, _xmm_regs+64(%rip)
+       movdqu  %xmm5, _xmm_regs+80(%rip)
+       movdqu  %xmm6, _xmm_regs+96(%rip)
+       movdqu  %xmm7, _xmm_regs+112(%rip)
+       movdqu  %xmm8, _xmm_regs+128(%rip)
+       movdqu  %xmm9, _xmm_regs+144(%rip)
+       movdqu  %xmm10, _xmm_regs+160(%rip)
+       movdqu  %xmm11, _xmm_regs+176(%rip)
+       movdqu  %xmm12, _xmm_regs+192(%rip)
+       movdqu  %xmm13, _xmm_regs+208(%rip)
+       movdqu  %xmm14, _xmm_regs+224(%rip)
+       movdqu  %xmm15, _xmm_regs+240(%rip)
+       jmp     *_callthis(%rip)
+LFE3:
+
+       .p2align 4,,15
+       .globl _snapshot_ret
+_snapshot_ret:
+       movq    %rdi, _rdi(%rip)
+       subq    $8, %rsp
+       call    *_callthis(%rip)
+       addq    $8, %rsp
+       movq    %rax, _rax(%rip)
+       movq    %rdx, _rdx(%rip)
+       movdqu  %xmm0, _xmm_regs+0(%rip)
+       movdqu  %xmm1, _xmm_regs+16(%rip)
+       fstpt   _x87_regs(%rip)
+       fstpt   _x87_regs+16(%rip)
+       fldt    _x87_regs+16(%rip)
+       fldt    _x87_regs(%rip)
+       ret
+
+       .globl  _callthis
+       .zerofill __DATA,__bss,_callthis,8,3
+       .globl  _rax
+       .zerofill __DATA,__bss,_rax,8,3
+       .globl  _rbx
+       .zerofill __DATA,__bss,_rbx,8,3
+       .globl  _rcx
+       .zerofill __DATA,__bss,_rcx,8,3
+       .globl  _rdx
+       .zerofill __DATA,__bss,_rdx,8,3
+       .globl  _rsi
+       .zerofill __DATA,__bss,_rsi,8,3
+       .globl  _rdi
+       .zerofill __DATA,__bss,_rdi,8,3
+       .globl  _rsp
+       .zerofill __DATA,__bss,_rsp,8,3
+       .globl  _rbp
+       .zerofill __DATA,__bss,_rbp,8,3
+       .globl  _r8
+       .zerofill __DATA,__bss,_r8,8,3
+       .globl  _r9
+       .zerofill __DATA,__bss,_r9,8,3
+       .globl  _r10
+       .zerofill __DATA,__bss,_r10,8,3
+       .globl  _r11
+       .zerofill __DATA,__bss,_r11,8,3
+       .globl  _r12
+       .zerofill __DATA,__bss,_r12,8,3
+       .globl  _r13
+       .zerofill __DATA,__bss,_r13,8,3
+       .globl  _r14
+       .zerofill __DATA,__bss,_r14,8,3
+       .globl  _r15
+       .zerofill __DATA,__bss,_r15,8,3
+       .globl  _xmm_regs
+       .zerofill __DATA,__bss,_xmm_regs,256,5
+       .globl  _x87_regs
+       .zerofill __DATA,__bss,_x87_regs,128,5
+       .globl  _volatile_var
+       .zerofill __DATA,__bss,_volatile_var,8,3
index 309db8ff12e0cf42caad10ae5df3bbd2a7bbb2ea..02b45052b325cb94fbaf048533bec69184295d0d 100644 (file)
@@ -36,9 +36,15 @@ set additional_flags "-W -Wall -mavx2"
 
 foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] {
     if {[runtest_file_p $runtests $src]} {
-        c-torture-execute [list $src \
-                                $srcdir/$subdir/asm-support.S] \
-                                $additional_flags
+       if { ([istarget *-*-darwin*]) } then {
+           c-torture-execute [list $src \
+                                   $srcdir/$subdir/asm-support-darwin.S] \
+                                   $additional_flags
+       } else {
+            c-torture-execute [list $src \
+                                    $srcdir/$subdir/asm-support.S] \
+                                    $additional_flags
+        }
     }
 }
 
index 94627ffbd4465d6af263620d7df8ee64863fe6dc..1027742cbb2ed12f9d861d188fe497de094ff193 100644 (file)
@@ -50,8 +50,8 @@ typedef union {
 } X87_T;
 extern void (*callthis)(void);
 extern unsigned long long rax,rbx,rcx,rdx,rsi,rdi,rsp,rbp,r8,r9,r10,r11,r12,r13,r14,r15;
-YMM_T ymm_regs[16];
-X87_T x87_regs[8];
+extern YMM_T ymm_regs[16];
+extern X87_T x87_regs[8];
 extern volatile unsigned long long volatile_var;
 extern void snapshot (void);
 extern void snapshot_ret (void);
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/bf16/m256bf16/asm-support-darwin.S b/gcc/testsuite/gcc.target/x86_64/abi/bf16/m256bf16/asm-support-darwin.S
new file mode 100644 (file)
index 0000000..e136b57
--- /dev/null
@@ -0,0 +1,97 @@
+       .text
+       .p2align 4,,15
+       .globl _snapshot
+_snapshot:
+.LFB3:
+       movq    %rax, _rax(%rip)
+       movq    %rbx, _rbx(%rip)
+       movq    %rcx, _rcx(%rip)
+       movq    %rdx, _rdx(%rip)
+       movq    %rdi, _rdi(%rip)
+       movq    %rsi, _rsi(%rip)
+       movq    %rbp, _rbp(%rip)
+       movq    %rsp, _rsp(%rip)
+       movq    %r8, _r8(%rip)
+       movq    %r9, _r9(%rip)
+       movq    %r10, _r10(%rip)
+       movq    %r11, _r11(%rip)
+       movq    %r12, _r12(%rip)
+       movq    %r13, _r13(%rip)
+       movq    %r14, _r14(%rip)
+       movq    %r15, _r15(%rip)
+       vmovdqu %ymm0, _ymm_regs+0(%rip)
+       vmovdqu %ymm1, _ymm_regs+32(%rip)
+       vmovdqu %ymm2, _ymm_regs+64(%rip)
+       vmovdqu %ymm3, _ymm_regs+96(%rip)
+       vmovdqu %ymm4, _ymm_regs+128(%rip)
+       vmovdqu %ymm5, _ymm_regs+160(%rip)
+       vmovdqu %ymm6, _ymm_regs+192(%rip)
+       vmovdqu %ymm7, _ymm_regs+224(%rip)
+       vmovdqu %ymm8, _ymm_regs+256(%rip)
+       vmovdqu %ymm9, _ymm_regs+288(%rip)
+       vmovdqu %ymm10, _ymm_regs+320(%rip)
+       vmovdqu %ymm11, _ymm_regs+352(%rip)
+       vmovdqu %ymm12, _ymm_regs+384(%rip)
+       vmovdqu %ymm13, _ymm_regs+416(%rip)
+       vmovdqu %ymm14, _ymm_regs+448(%rip)
+       vmovdqu %ymm15, _ymm_regs+480(%rip)
+       jmp     *_callthis(%rip)
+.LFE3:
+
+       .p2align 4,,15
+       .globl _snapshot_ret
+_snapshot_ret:
+       movq    %rdi, _rdi(%rip)
+       subq    $8, %rsp
+       call    *_callthis(%rip)
+       addq    $8, %rsp
+       movq    %rax, _rax(%rip)
+       movq    %rdx, _rdx(%rip)
+       vmovdqu %ymm0, _ymm_regs+0(%rip)
+       vmovdqu %ymm1, _ymm_regs+32(%rip)
+       fstpt   _x87_regs(%rip)
+       fstpt   _x87_regs+16(%rip)
+       fldt    _x87_regs+16(%rip)
+       fldt    _x87_regs(%rip)
+       ret
+
+       .globl  _callthis
+       .zerofill __DATA,__bss,_callthis,8,3
+       .globl  _rax
+       .zerofill __DATA,__bss,_rax,8,3
+       .globl  _rbx
+       .zerofill __DATA,__bss,_rbx,8,3
+       .globl  _rcx
+       .zerofill __DATA,__bss,_rcx,8,3
+       .globl  _rdx
+       .zerofill __DATA,__bss,_rdx,8,3
+       .globl  _rsi
+       .zerofill __DATA,__bss,_rsi,8,3
+       .globl  _rdi
+       .zerofill __DATA,__bss,_rdi,8,3
+       .globl  _rsp
+       .zerofill __DATA,__bss,_rsp,8,3
+       .globl  _rbp
+       .zerofill __DATA,__bss,_rbp,8,3
+       .globl  _r8
+       .zerofill __DATA,__bss,_r8,8,3
+       .globl  _r9
+       .zerofill __DATA,__bss,_r9,8,3
+       .globl  _r10
+       .zerofill __DATA,__bss,_r10,8,3
+       .globl  _r11
+       .zerofill __DATA,__bss,_r11,8,3
+       .globl  _r12
+       .zerofill __DATA,__bss,_r12,8,3
+       .globl  _r13
+       .zerofill __DATA,__bss,_r13,8,3
+       .globl  _r14
+       .zerofill __DATA,__bss,_r14,8,3
+       .globl  _r15
+       .zerofill __DATA,__bss,_r15,8,3
+       .globl  _ymm_regs
+       .zerofill __DATA,__bss,_ymm_regs,512,5
+       .globl  _x87_regs
+       .zerofill __DATA,__bss,_x87_regs,128,5
+       .globl  _volatile_var
+       .zerofill __DATA,__bss,_volatile_var,8,3
index b6e0fed4cb4297426ab691c0b2281ec02fd32d3f..28abb4e876beac92cc8253e5f8f070e4fd6ef933 100644 (file)
@@ -36,9 +36,15 @@ set additional_flags "-W -Wall -mavx512f"
 
 foreach src [lsort [glob -nocomplain $srcdir/$subdir/test_*.c]] {
     if {[runtest_file_p $runtests $src]} {
-        c-torture-execute [list $src \
-                                $srcdir/$subdir/asm-support.S] \
-                                $additional_flags
+       if { ([istarget *-*-darwin*]) } then {
+           c-torture-execute [list $src \
+                                   $srcdir/$subdir/asm-support-darwin.S] \
+                                   $additional_flags
+       } else {
+            c-torture-execute [list $src \
+                                    $srcdir/$subdir/asm-support.S] \
+                                    $additional_flags
+        }
     }
 }
 
index 64b24783833670d0d9b0b8a6c4d2b34567a01a63..f9710bae347b8c6597de20c8e6fb1089b13bb4ba 100644 (file)
@@ -51,8 +51,8 @@ typedef union {
 } X87_T;
 extern void (*callthis)(void);
 extern unsigned long long rax,rbx,rcx,rdx,rsi,rdi,rsp,rbp,r8,r9,r10,r11,r12,r13,r14,r15;
-ZMM_T zmm_regs[32];
-X87_T x87_regs[8];
+extern ZMM_T zmm_regs[32];
+extern X87_T x87_regs[8];
 extern volatile unsigned long long volatile_var;
 extern void snapshot (void);
 extern void snapshot_ret (void);
diff --git a/gcc/testsuite/gcc.target/x86_64/abi/bf16/m512bf16/asm-support-darwin.S b/gcc/testsuite/gcc.target/x86_64/abi/bf16/m512bf16/asm-support-darwin.S
new file mode 100644 (file)
index 0000000..71b61b3
--- /dev/null
@@ -0,0 +1,113 @@
+       .text
+       .p2align 4,,15
+       .globl _snapshot
+_snapshot:
+.LFB3:
+       movq    %rax, _rax(%rip)
+       movq    %rbx, _rbx(%rip)
+       movq    %rcx, _rcx(%rip)
+       movq    %rdx, _rdx(%rip)
+       movq    %rdi, _rdi(%rip)
+       movq    %rsi, _rsi(%rip)
+       movq    %rbp, _rbp(%rip)
+       movq    %rsp, _rsp(%rip)
+       movq    %r8, _r8(%rip)
+       movq    %r9, _r9(%rip)
+       movq    %r10, _r10(%rip)
+       movq    %r11, _r11(%rip)
+       movq    %r12, _r12(%rip)
+       movq    %r13, _r13(%rip)
+       movq    %r14, _r14(%rip)
+       movq    %r15, _r15(%rip)
+       vmovdqu32 %zmm0, _zmm_regs+0(%rip)
+       vmovdqu32 %zmm1, _zmm_regs+64(%rip)
+       vmovdqu32 %zmm2, _zmm_regs+128(%rip)
+       vmovdqu32 %zmm3, _zmm_regs+192(%rip)
+       vmovdqu32 %zmm4, _zmm_regs+256(%rip)
+       vmovdqu32 %zmm5, _zmm_regs+320(%rip)
+       vmovdqu32 %zmm6, _zmm_regs+384(%rip)
+       vmovdqu32 %zmm7, _zmm_regs+448(%rip)
+       vmovdqu32 %zmm8, _zmm_regs+512(%rip)
+       vmovdqu32 %zmm9, _zmm_regs+576(%rip)
+       vmovdqu32 %zmm10, _zmm_regs+640(%rip)
+       vmovdqu32 %zmm11, _zmm_regs+704(%rip)
+       vmovdqu32 %zmm12, _zmm_regs+768(%rip)
+       vmovdqu32 %zmm13, _zmm_regs+832(%rip)
+       vmovdqu32 %zmm14, _zmm_regs+896(%rip)
+       vmovdqu32 %zmm15, _zmm_regs+960(%rip)
+       vmovdqu32 %zmm16, _zmm_regs+1024(%rip)
+       vmovdqu32 %zmm17, _zmm_regs+1088(%rip)
+       vmovdqu32 %zmm18, _zmm_regs+1152(%rip)
+       vmovdqu32 %zmm19, _zmm_regs+1216(%rip)
+       vmovdqu32 %zmm20, _zmm_regs+1280(%rip)
+       vmovdqu32 %zmm21, _zmm_regs+1344(%rip)
+       vmovdqu32 %zmm22, _zmm_regs+1408(%rip)
+       vmovdqu32 %zmm23, _zmm_regs+1472(%rip)
+       vmovdqu32 %zmm24, _zmm_regs+1536(%rip)
+       vmovdqu32 %zmm25, _zmm_regs+1600(%rip)
+       vmovdqu32 %zmm26, _zmm_regs+1664(%rip)
+       vmovdqu32 %zmm27, _zmm_regs+1728(%rip)
+       vmovdqu32 %zmm28, _zmm_regs+1792(%rip)
+       vmovdqu32 %zmm29, _zmm_regs+1856(%rip)
+       vmovdqu32 %zmm30, _zmm_regs+1920(%rip)
+       vmovdqu32 %zmm31, _zmm_regs+1984(%rip)
+       jmp     *_callthis(%rip)
+.LFE3:
+
+       .p2align 4,,15
+       .globl _snapshot_ret
+_snapshot_ret:
+       movq    %rdi, _rdi(%rip)
+       subq    $8, %rsp
+       call    *_callthis(%rip)
+       addq    $8, %rsp
+       movq    %rax, _rax(%rip)
+       movq    %rdx, _rdx(%rip)
+       vmovdqu32       %zmm0, _zmm_regs+0(%rip)
+       vmovdqu32       %zmm1, _zmm_regs+64(%rip)
+       fstpt   _x87_regs(%rip)
+       fstpt   _x87_regs+16(%rip)
+       fldt    _x87_regs+16(%rip)
+       fldt    _x87_regs(%rip)
+       ret
+
+       .globl  _callthis
+       .zerofill __DATA,__bss,_callthis,8,3
+       .globl  _rax
+       .zerofill __DATA,__bss,_rax,8,3
+       .globl  _rbx
+       .zerofill __DATA,__bss,_rbx,8,3
+       .globl  _rcx
+       .zerofill __DATA,__bss,_rcx,8,3
+       .globl  _rdx
+       .zerofill __DATA,__bss,_rdx,8,3
+       .globl  _rsi
+       .zerofill __DATA,__bss,_rsi,8,3
+       .globl  _rdi
+       .zerofill __DATA,__bss,_rdi,8,3
+       .globl  _rsp
+       .zerofill __DATA,__bss,_rsp,8,3
+       .globl  _rbp
+       .zerofill __DATA,__bss,_rbp,8,3
+       .globl  _r8
+       .zerofill __DATA,__bss,_r8,8,3
+       .globl  _r9
+       .zerofill __DATA,__bss,_r9,8,3
+       .globl  _r10
+       .zerofill __DATA,__bss,_r10,8,3
+       .globl  _r11
+       .zerofill __DATA,__bss,_r11,8,3
+       .globl  _r12
+       .zerofill __DATA,__bss,_r12,8,3
+       .globl  _r13
+       .zerofill __DATA,__bss,_r13,8,3
+       .globl  _r14
+       .zerofill __DATA,__bss,_r14,8,3
+       .globl  _r15
+       .zerofill __DATA,__bss,_r15,8,3
+       .globl  _zmm_regs
+       .zerofill __DATA,__bss,_zmm_regs,2048,6
+       .globl  _x87_regs
+       .zerofill __DATA,__bss,_x87_regs,128,5
+       .globl  _volatile_var
+       .zerofill __DATA,__bss,_volatile_var,8,3