Commit b3d7e191 by Ramana Radhakrishnan Committed by Ramana Radhakrishnan

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
parent f89cc1a3
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> 2010-01-19 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/42719 PR tree-optimization/42719
......
(* Auto-generate ARM Neon intrinsics tests. (* 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. Contributed by CodeSourcery.
This file is part of GCC. This file is part of GCC.
...@@ -58,7 +58,7 @@ let emit_prologue chan test_name = ...@@ -58,7 +58,7 @@ let emit_prologue chan test_name =
(* Emit declarations of local variables that are going to be passed (* Emit declarations of local variables that are going to be passed
to an intrinsic, together with one to take a returned value if needed. *) 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 () = let emit () =
ignore ( ignore (
List.fold_left (fun arg_number -> fun (flags, ty) -> List.fold_left (fun arg_number -> fun (flags, ty) ->
...@@ -75,11 +75,17 @@ let emit_automatics chan c_types = ...@@ -75,11 +75,17 @@ let emit_automatics chan c_types =
in in
match c_types with match c_types with
(_, return_ty) :: tys -> (_, return_ty) :: tys ->
if return_ty <> "void" then if return_ty <> "void" then begin
(* The intrinsic returns a value. *) (* The intrinsic returns a value. We need to do explict register
(Printf.fprintf chan " %s out_%s;\n" return_ty return_ty; allocation for vget_low tests or they fail because of copy
emit ()) elimination. *)
else ((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. *) (* The intrinsic does not return a value. *)
emit () emit ()
| _ -> assert false | _ -> assert false
...@@ -257,7 +263,7 @@ let test_intrinsic dir opcode features shape name munge elt_ty = ...@@ -257,7 +263,7 @@ let test_intrinsic dir opcode features shape name munge elt_ty =
(* Emit file and function prologues. *) (* Emit file and function prologues. *)
emit_prologue chan test_name; emit_prologue chan test_name;
(* Emit local variable declarations. *) (* Emit local variable declarations. *)
emit_automatics chan c_types; emit_automatics chan c_types features;
Printf.fprintf chan "\n"; Printf.fprintf chan "\n";
(* Emit the call to the intrinsic. *) (* Emit the call to the intrinsic. *)
emit_call chan const_valuator c_types name elt_ty; emit_call chan const_valuator c_types name elt_ty;
......
(* Common code for ARM NEON header file, documentation and test case (* Common code for ARM NEON header file, documentation and test case
generators. generators.
Copyright (C) 2006, 2007 Free Software Foundation, Inc. Copyright (C) 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
Contributed by CodeSourcery. Contributed by CodeSourcery.
This file is part of GCC. This file is part of GCC.
...@@ -234,6 +234,7 @@ type features = ...@@ -234,6 +234,7 @@ type features =
cases. The function supplied must return the integer to be written cases. The function supplied must return the integer to be written
into the testcase for the argument number (0-based) supplied to it. *) into the testcase for the argument number (0-based) supplied to it. *)
| Const_valuator of (int -> int) | Const_valuator of (int -> int)
| Fixed_return_reg
exception MixedMode of elts * elts exception MixedMode of elts * elts
...@@ -1089,9 +1090,13 @@ let ops = ...@@ -1089,9 +1090,13 @@ let ops =
Use_operands [| Dreg; Qreg |], "vget_high", Use_operands [| Dreg; Qreg |], "vget_high",
notype_1, pf_su_8_64; notype_1, pf_su_8_64;
Vget_low, [Instruction_name ["vmov"]; 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", 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. *) (* Conversions. *)
Vcvt, [InfoWord], All (2, Dreg), "vcvt", conv_1, Vcvt, [InfoWord], All (2, Dreg), "vcvt", conv_1,
......
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> 2010-01-19 Janus Weil <janus@gcc.gnu.org>
PR fortran/42545 PR fortran/42545
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
void test_vget_lowf32 (void) void test_vget_lowf32 (void)
{ {
float32x2_t out_float32x2_t; register float32x2_t out_float32x2_t asm ("d18");
float32x4_t arg0_float32x4_t; float32x4_t arg0_float32x4_t;
out_float32x2_t = vget_low_f32 (arg0_float32x4_t); out_float32x2_t = vget_low_f32 (arg0_float32x4_t);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
void test_vget_lowp16 (void) void test_vget_lowp16 (void)
{ {
poly16x4_t out_poly16x4_t; register poly16x4_t out_poly16x4_t asm ("d18");
poly16x8_t arg0_poly16x8_t; poly16x8_t arg0_poly16x8_t;
out_poly16x4_t = vget_low_p16 (arg0_poly16x8_t); out_poly16x4_t = vget_low_p16 (arg0_poly16x8_t);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
void test_vget_lowp8 (void) void test_vget_lowp8 (void)
{ {
poly8x8_t out_poly8x8_t; register poly8x8_t out_poly8x8_t asm ("d18");
poly8x16_t arg0_poly8x16_t; poly8x16_t arg0_poly8x16_t;
out_poly8x8_t = vget_low_p8 (arg0_poly8x16_t); out_poly8x8_t = vget_low_p8 (arg0_poly8x16_t);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
void test_vget_lows16 (void) void test_vget_lows16 (void)
{ {
int16x4_t out_int16x4_t; register int16x4_t out_int16x4_t asm ("d18");
int16x8_t arg0_int16x8_t; int16x8_t arg0_int16x8_t;
out_int16x4_t = vget_low_s16 (arg0_int16x8_t); out_int16x4_t = vget_low_s16 (arg0_int16x8_t);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
void test_vget_lows32 (void) void test_vget_lows32 (void)
{ {
int32x2_t out_int32x2_t; register int32x2_t out_int32x2_t asm ("d18");
int32x4_t arg0_int32x4_t; int32x4_t arg0_int32x4_t;
out_int32x2_t = vget_low_s32 (arg0_int32x4_t); out_int32x2_t = vget_low_s32 (arg0_int32x4_t);
......
...@@ -15,5 +15,4 @@ void test_vget_lows64 (void) ...@@ -15,5 +15,4 @@ void test_vget_lows64 (void)
out_int64x1_t = vget_low_s64 (arg0_int64x2_t); 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 } } */ /* { dg-final { cleanup-saved-temps } } */
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
void test_vget_lows8 (void) void test_vget_lows8 (void)
{ {
int8x8_t out_int8x8_t; register int8x8_t out_int8x8_t asm ("d18");
int8x16_t arg0_int8x16_t; int8x16_t arg0_int8x16_t;
out_int8x8_t = vget_low_s8 (arg0_int8x16_t); out_int8x8_t = vget_low_s8 (arg0_int8x16_t);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
void test_vget_lowu16 (void) void test_vget_lowu16 (void)
{ {
uint16x4_t out_uint16x4_t; register uint16x4_t out_uint16x4_t asm ("d18");
uint16x8_t arg0_uint16x8_t; uint16x8_t arg0_uint16x8_t;
out_uint16x4_t = vget_low_u16 (arg0_uint16x8_t); out_uint16x4_t = vget_low_u16 (arg0_uint16x8_t);
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
void test_vget_lowu32 (void) void test_vget_lowu32 (void)
{ {
uint32x2_t out_uint32x2_t; register uint32x2_t out_uint32x2_t asm ("d18");
uint32x4_t arg0_uint32x4_t; uint32x4_t arg0_uint32x4_t;
out_uint32x2_t = vget_low_u32 (arg0_uint32x4_t); out_uint32x2_t = vget_low_u32 (arg0_uint32x4_t);
......
...@@ -15,5 +15,4 @@ void test_vget_lowu64 (void) ...@@ -15,5 +15,4 @@ void test_vget_lowu64 (void)
out_uint64x1_t = vget_low_u64 (arg0_uint64x2_t); 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 } } */ /* { dg-final { cleanup-saved-temps } } */
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
void test_vget_lowu8 (void) void test_vget_lowu8 (void)
{ {
uint8x8_t out_uint8x8_t; register uint8x8_t out_uint8x8_t asm ("d18");
uint8x16_t arg0_uint8x16_t; uint8x16_t arg0_uint8x16_t;
out_uint8x8_t = vget_low_u8 (arg0_uint8x16_t); out_uint8x8_t = vget_low_u8 (arg0_uint8x16_t);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment