+2013-01-23 Alex Velenko <Alex.Velenko@arm.com>
+
+ * config/aarch64/aarch64-simd.md
+ (aarch64_be_checked_get_lane<mode>): New define_expand.
+ * config/aarch64/aarch64-simd-builtins.def
+ (BUILTIN_VALL (GETLANE, be_checked_get_lane, 0):
+ New builtin definition.
+ * config/aarch64/arm_neon.h: (__aarch64_vget_lane_any):
+ Use new safe be builtin.
+
2014-01-23 Alex Velenko <Alex.Velenko@arm.com>
* config/aarch64/aarch64-simd.md (aarch64_be_ld1<mode>):
BUILTIN_VALL (GETLANE, get_lane, 0)
VAR1 (GETLANE, get_lane, 0, di)
+ BUILTIN_VALL (GETLANE, be_checked_get_lane, 0)
BUILTIN_VD_RE (REINTERP, reinterpretdi, 0)
BUILTIN_VDC (REINTERP, reinterpretv8qi, 0)
[(set_attr "type" "neon_to_gp<q>")]
)
+(define_expand "aarch64_be_checked_get_lane<mode>"
+ [(match_operand:<VEL> 0 "aarch64_simd_nonimmediate_operand")
+ (match_operand:VALL 1 "register_operand")
+ (match_operand:SI 2 "immediate_operand")]
+ "TARGET_SIMD"
+ {
+ operands[2] = GEN_INT (ENDIAN_LANE_N (<MODE>mode, INTVAL (operands[2])));
+ emit_insn (gen_aarch64_get_lane<mode> (operands[0],
+ operands[1],
+ operands[2]));
+ DONE;
+ }
+)
+
;; Lane extraction of a value, neither sign nor zero extension
;; is guaranteed so upper bits should be considered undefined.
(define_insn "aarch64_get_lane<mode>"
#define __aarch64_vget_lane_any(__size, __cast_ret, __cast_a, __a, __b) \
(__cast_ret \
- __builtin_aarch64_get_lane##__size (__cast_a __a, __b))
+ __builtin_aarch64_be_checked_get_lane##__size (__cast_a __a, __b))
#define __aarch64_vget_lane_f32(__a, __b) \
__aarch64_vget_lane_any (v2sf, , , __a, __b)