Fix target/38697
2010-01-19 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> PR target/38697 * config/arm/neon-testgen.m (emit_automatics): New parameter features. Adjust for Fixed_return_reg feature. (test_intrinsic): Call emit_automatics with new feature. * config/arm/neon.ml: Update copyright years. (features): New Fixed_return_reg feature. (ops): Update feature for Vget_low. 2010-01-19 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com> PR target/38697. * gcc.target/arm/neon/vget_lowf32.c: Regenerate. * gcc.target/arm/neon/vget_lowp16.c: Likewise. * gcc.target/arm/neon/vget_lowp8.c: Likewise. * gcc.target/arm/neon/vget_lows16.c: Likewise. * gcc.target/arm/neon/vget_lows32.c: Likewise. * gcc.target/arm/neon/vget_lows64.c: Likewise. * gcc.target/arm/neon/vget_lows8.c: Likewise. * gcc.target/arm/neon/vget_lowu16.c: Likewise. * gcc.target/arm/neon/vget_lowu32.c: Likewise. * gcc.target/arm/neon/vget_lowu64.c: Likewise. * gcc.target/arm/neon/vget_lowu8.c: Likewise. From-SVN: r156042
This commit is contained in:
parent
f89cc1a337
commit
b3d7e1910f
15 changed files with 56 additions and 22 deletions
|
@ -1,3 +1,13 @@
|
|||
2010-01-19 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
|
||||
|
||||
PR target/38697
|
||||
* config/arm/neon-testgen.m (emit_automatics): New parameter
|
||||
features. Adjust for Fixed_return_reg feature.
|
||||
(test_intrinsic): Call emit_automatics with new feature.
|
||||
* config/arm/neon.ml: Update copyright years.
|
||||
(features): New Fixed_return_reg feature.
|
||||
(ops): Update feature for Vget_low.
|
||||
|
||||
2010-01-19 Jakub Jelinek <jakub@redhat.com>
|
||||
|
||||
PR tree-optimization/42719
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
(* Auto-generate ARM Neon intrinsics tests.
|
||||
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
Contributed by CodeSourcery.
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -58,7 +58,7 @@ let emit_prologue chan test_name =
|
|||
|
||||
(* Emit declarations of local variables that are going to be passed
|
||||
to an intrinsic, together with one to take a returned value if needed. *)
|
||||
let emit_automatics chan c_types =
|
||||
let emit_automatics chan c_types features =
|
||||
let emit () =
|
||||
ignore (
|
||||
List.fold_left (fun arg_number -> fun (flags, ty) ->
|
||||
|
@ -75,11 +75,17 @@ let emit_automatics chan c_types =
|
|||
in
|
||||
match c_types with
|
||||
(_, return_ty) :: tys ->
|
||||
if return_ty <> "void" then
|
||||
(* The intrinsic returns a value. *)
|
||||
(Printf.fprintf chan " %s out_%s;\n" return_ty return_ty;
|
||||
emit ())
|
||||
else
|
||||
if return_ty <> "void" then begin
|
||||
(* The intrinsic returns a value. We need to do explict register
|
||||
allocation for vget_low tests or they fail because of copy
|
||||
elimination. *)
|
||||
((if List.mem Fixed_return_reg features then
|
||||
Printf.fprintf chan " register %s out_%s asm (\"d18\");\n"
|
||||
return_ty return_ty
|
||||
else
|
||||
Printf.fprintf chan " %s out_%s;\n" return_ty return_ty);
|
||||
emit ())
|
||||
end else
|
||||
(* The intrinsic does not return a value. *)
|
||||
emit ()
|
||||
| _ -> assert false
|
||||
|
@ -257,7 +263,7 @@ let test_intrinsic dir opcode features shape name munge elt_ty =
|
|||
(* Emit file and function prologues. *)
|
||||
emit_prologue chan test_name;
|
||||
(* Emit local variable declarations. *)
|
||||
emit_automatics chan c_types;
|
||||
emit_automatics chan c_types features;
|
||||
Printf.fprintf chan "\n";
|
||||
(* Emit the call to the intrinsic. *)
|
||||
emit_call chan const_valuator c_types name elt_ty;
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
(* Common code for ARM NEON header file, documentation and test case
|
||||
generators.
|
||||
|
||||
Copyright (C) 2006, 2007 Free Software Foundation, Inc.
|
||||
Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
Contributed by CodeSourcery.
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -234,6 +234,7 @@ type features =
|
|||
cases. The function supplied must return the integer to be written
|
||||
into the testcase for the argument number (0-based) supplied to it. *)
|
||||
| Const_valuator of (int -> int)
|
||||
| Fixed_return_reg
|
||||
|
||||
exception MixedMode of elts * elts
|
||||
|
||||
|
@ -1089,9 +1090,13 @@ let ops =
|
|||
Use_operands [| Dreg; Qreg |], "vget_high",
|
||||
notype_1, pf_su_8_64;
|
||||
Vget_low, [Instruction_name ["vmov"];
|
||||
Disassembles_as [Use_operands [| Dreg; Dreg |]]],
|
||||
Disassembles_as [Use_operands [| Dreg; Dreg |]];
|
||||
Fixed_return_reg],
|
||||
Use_operands [| Dreg; Qreg |], "vget_low",
|
||||
notype_1, pf_su_8_64;
|
||||
notype_1, pf_su_8_32;
|
||||
Vget_low, [No_op],
|
||||
Use_operands [| Dreg; Qreg |], "vget_low",
|
||||
notype_1, [S64; U64];
|
||||
|
||||
(* Conversions. *)
|
||||
Vcvt, [InfoWord], All (2, Dreg), "vcvt", conv_1,
|
||||
|
|
|
@ -1,3 +1,18 @@
|
|||
2010-01-19 Ramana Radhakrishnan <ramana.radhakrishnan@arm.com>
|
||||
|
||||
PR target/38697.
|
||||
* gcc.target/arm/neon/vget_lowf32.c: Regenerate.
|
||||
* gcc.target/arm/neon/vget_lowp16.c: Likewise.
|
||||
* gcc.target/arm/neon/vget_lowp8.c: Likewise.
|
||||
* gcc.target/arm/neon/vget_lows16.c: Likewise.
|
||||
* gcc.target/arm/neon/vget_lows32.c: Likewise.
|
||||
* gcc.target/arm/neon/vget_lows64.c: Likewise.
|
||||
* gcc.target/arm/neon/vget_lows8.c: Likewise.
|
||||
* gcc.target/arm/neon/vget_lowu16.c: Likewise.
|
||||
* gcc.target/arm/neon/vget_lowu32.c: Likewise.
|
||||
* gcc.target/arm/neon/vget_lowu64.c: Likewise.
|
||||
* gcc.target/arm/neon/vget_lowu8.c: Likewise.
|
||||
|
||||
2010-01-19 Janus Weil <janus@gcc.gnu.org>
|
||||
|
||||
PR fortran/42545
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void test_vget_lowf32 (void)
|
||||
{
|
||||
float32x2_t out_float32x2_t;
|
||||
register float32x2_t out_float32x2_t asm ("d18");
|
||||
float32x4_t arg0_float32x4_t;
|
||||
|
||||
out_float32x2_t = vget_low_f32 (arg0_float32x4_t);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void test_vget_lowp16 (void)
|
||||
{
|
||||
poly16x4_t out_poly16x4_t;
|
||||
register poly16x4_t out_poly16x4_t asm ("d18");
|
||||
poly16x8_t arg0_poly16x8_t;
|
||||
|
||||
out_poly16x4_t = vget_low_p16 (arg0_poly16x8_t);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void test_vget_lowp8 (void)
|
||||
{
|
||||
poly8x8_t out_poly8x8_t;
|
||||
register poly8x8_t out_poly8x8_t asm ("d18");
|
||||
poly8x16_t arg0_poly8x16_t;
|
||||
|
||||
out_poly8x8_t = vget_low_p8 (arg0_poly8x16_t);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void test_vget_lows16 (void)
|
||||
{
|
||||
int16x4_t out_int16x4_t;
|
||||
register int16x4_t out_int16x4_t asm ("d18");
|
||||
int16x8_t arg0_int16x8_t;
|
||||
|
||||
out_int16x4_t = vget_low_s16 (arg0_int16x8_t);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void test_vget_lows32 (void)
|
||||
{
|
||||
int32x2_t out_int32x2_t;
|
||||
register int32x2_t out_int32x2_t asm ("d18");
|
||||
int32x4_t arg0_int32x4_t;
|
||||
|
||||
out_int32x2_t = vget_low_s32 (arg0_int32x4_t);
|
||||
|
|
|
@ -15,5 +15,4 @@ void test_vget_lows64 (void)
|
|||
out_int64x1_t = vget_low_s64 (arg0_int64x2_t);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
|
||||
/* { dg-final { cleanup-saved-temps } } */
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void test_vget_lows8 (void)
|
||||
{
|
||||
int8x8_t out_int8x8_t;
|
||||
register int8x8_t out_int8x8_t asm ("d18");
|
||||
int8x16_t arg0_int8x16_t;
|
||||
|
||||
out_int8x8_t = vget_low_s8 (arg0_int8x16_t);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void test_vget_lowu16 (void)
|
||||
{
|
||||
uint16x4_t out_uint16x4_t;
|
||||
register uint16x4_t out_uint16x4_t asm ("d18");
|
||||
uint16x8_t arg0_uint16x8_t;
|
||||
|
||||
out_uint16x4_t = vget_low_u16 (arg0_uint16x8_t);
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void test_vget_lowu32 (void)
|
||||
{
|
||||
uint32x2_t out_uint32x2_t;
|
||||
register uint32x2_t out_uint32x2_t asm ("d18");
|
||||
uint32x4_t arg0_uint32x4_t;
|
||||
|
||||
out_uint32x2_t = vget_low_u32 (arg0_uint32x4_t);
|
||||
|
|
|
@ -15,5 +15,4 @@ void test_vget_lowu64 (void)
|
|||
out_uint64x1_t = vget_low_u64 (arg0_uint64x2_t);
|
||||
}
|
||||
|
||||
/* { dg-final { scan-assembler "vmov\[ \]+\[dD\]\[0-9\]+, \[dD\]\[0-9\]+!?\(\[ \]+@\[a-zA-Z0-9 \]+\)?\n" } } */
|
||||
/* { dg-final { cleanup-saved-temps } } */
|
||||
|
|
|
@ -9,7 +9,7 @@
|
|||
|
||||
void test_vget_lowu8 (void)
|
||||
{
|
||||
uint8x8_t out_uint8x8_t;
|
||||
register uint8x8_t out_uint8x8_t asm ("d18");
|
||||
uint8x16_t arg0_uint8x16_t;
|
||||
|
||||
out_uint8x8_t = vget_low_u8 (arg0_uint8x16_t);
|
||||
|
|
Loading…
Add table
Reference in a new issue