mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-22 21:51:36 +08:00
arm: Fix the mve multilib for the broken cmse support (pr99939).
The current CMSE support in the multilib build for "-march=armv8.1-m.main+mve -mfloat-abi=hard -mfpu=auto" is broken as specified in PR99939 and this patch fixes the issue. gcc/testsuite/ChangeLog: 2021-06-11 Srinath Parvathaneni <srinath.parvathaneni@arm.com> PR target/99939 * gcc.target/arm/cmse/cmse-18.c: Add separate scan-assembler directives check for target is v8.1-m.main+mve or not before comparing the assembly output. * gcc.target/arm/cmse/cmse-20.c: New test. libgcc/ChangeLog: 2021-06-11 Srinath Parvathaneni <srinath.parvathaneni@arm.com> PR target/99939 * config/arm/cmse_nonsecure_call.S: Add __ARM_FEATURE_MVE macro. * config/arm/t-arm: To link cmse.o and cmse_nonsecure_call.o on passing -mcmse option.
This commit is contained in:
parent
117c642664
commit
c5ed014834
@ -8,4 +8,5 @@ void bar(f func, int a)
|
||||
func(a);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-rtl-dump "call unspec\\\[\\\[r4:SI\\\]\\\]" "final" } } */
|
||||
/* { dg-final { scan-rtl-dump "call unspec\\\[\\\[r4:SI\\\]\\\]" "final" { target { ! arm_v8_1m_mve_ok } } } } */
|
||||
/* { dg-final { scan-rtl-dump "call unspec\\\[\\\[r\[0-7\]:SI\\\]\\\]" "final" { target { arm_v8_1m_mve_ok } } } } */
|
||||
|
28
gcc/testsuite/gcc.target/arm/cmse/cmse-20.c
Normal file
28
gcc/testsuite/gcc.target/arm/cmse/cmse-20.c
Normal file
@ -0,0 +1,28 @@
|
||||
/* This test is executed only if the execution engine supports CMSE instructions. */
|
||||
/* { dg-options "--save-temps -mcmse -Wl,--section-start,.gnu.sgstubs=0x00400000" } */
|
||||
|
||||
#include <arm_cmse.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
void __attribute__((cmse_nonsecure_entry))
|
||||
secure_fun (int a, int *p)
|
||||
{
|
||||
void *b = cmse_check_address_range ((void *)p, a, 1);
|
||||
|
||||
if (b == NULL)
|
||||
__builtin_abort ();
|
||||
printf("%d", *((int *)b));
|
||||
}
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
int *ptr;
|
||||
int size = 1;
|
||||
ptr = (int *) calloc (1, sizeof(int *));
|
||||
*ptr = 1315852292;
|
||||
secure_fun (size, ptr);
|
||||
free (ptr);
|
||||
return 0;
|
||||
}
|
@ -25,7 +25,7 @@
|
||||
|
||||
.syntax unified
|
||||
#ifdef __ARM_PCS_VFP
|
||||
# if __ARM_FP & 0x8
|
||||
# if (__ARM_FP & 0x8) || (__ARM_FEATURE_MVE & 1)
|
||||
.fpu fpv5-d16
|
||||
# else
|
||||
.fpu fpv4-sp-d16
|
||||
@ -59,7 +59,7 @@ vmov s24, s25, r5, r5
|
||||
vmov s26, s27, r5, r5
|
||||
vmov s28, s29, r5, r5
|
||||
vmov s30, s31, r5, r5
|
||||
#elif __ARM_FP & 0x08
|
||||
#elif (__ARM_FP & 0x8) || (__ARM_FEATURE_MVE & 1)
|
||||
vmov.f64 d9, d8
|
||||
vmov.f64 d10, d8
|
||||
vmov.f64 d11, d8
|
||||
|
@ -3,18 +3,17 @@ LIB1ASMFUNCS = _thumb1_case_sqi _thumb1_case_uqi _thumb1_case_shi \
|
||||
_thumb1_case_uhi _thumb1_case_si _speculation_barrier
|
||||
|
||||
HAVE_CMSE:=$(findstring __ARM_FEATURE_CMSE,$(shell $(gcc_compile_bare) -dM -E - </dev/null))
|
||||
HAVE_V81M:=$(findstring armv8.1-m.main,$(gcc_compile_bare))
|
||||
ifeq ($(shell $(gcc_compile_bare) -E -mcmse - </dev/null >/dev/null 2>/dev/null; echo $$?),0)
|
||||
CMSE_OPTS:=-mcmse
|
||||
endif
|
||||
|
||||
ifdef HAVE_CMSE
|
||||
ifndef HAVE_V81M
|
||||
|
||||
libgcc-objects += cmse.o cmse_nonsecure_call.o
|
||||
|
||||
cmse.o: $(srcdir)/config/arm/cmse.c
|
||||
$(gcc_compile) -c $(CMSE_OPTS) $<
|
||||
|
||||
cmse_nonsecure_call.o: $(srcdir)/config/arm/cmse_nonsecure_call.S
|
||||
$(gcc_compile) -c $<
|
||||
endif
|
||||
endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user