Fix PR 16722 by adding support for 8-byte vector constants.

* config/tc-arm.c (literal_pool): New field "alignment".
  (find_or_make_literal_pool): Initialize "alignment" to 2.
  (s_ltorg): Align the pool using value of "alignment"
  (parse_big_immediate): New parameter "in_exp". Return
  parsed expression if "in_exp" is not null.
  (parse_address_main): Invoke "parse_big_immediate" for
  constant parameter.
  (add_to_lit_pool): Add one parameter 'nbytes'.
  Split 8 byte entry into two 4 byte entry.
  Add padding to align 8 byte entry to 8 byte boundary.
  (encode_arm_cp_address): Generate literal pool entry if possible.
  (move_or_literal_pool): Generate entry for vldr case.
  (enum lit_type): New enum type.
  (do_ldst): Use new enum type.
  (do_ldstv4): Likewise.
  (do_t_ldst): Likewise.
  (neon_write_immbits): Support Thumb-2 mode.

  * gas/arm/ldconst.s: Add test cases for symbol literal.
  * gas/arm/ldconst.d: Likewise.
  * gas/arm/vldconst.s: Add test cases for vldr.
  * gas/arm/thumb2_vpool.s: Likewise.
  * gas/arm/vldconst.d: New pattern for little-endian.
  * gas/arm/thumb2_vpool.d: Likewise.
  * gas/arm/vldconst_be.d: New pattern for big-endian.
  * gas/arm/thumb2_vpool_be.d: Likewise.
This commit is contained in:
Jiong Wang 2014-07-08 12:14:56 +01:00 committed by Nick Clifton
parent bffebb6ba5
commit 8335d6aa34
20 changed files with 1735 additions and 315 deletions

View file

@ -1,3 +1,23 @@
2014-07-08 Jiong Wang <jiong.wang@arm.com>
* config/tc-arm.c (literal_pool): New field "alignment".
(find_or_make_literal_pool): Initialize "alignment" to 2.
(s_ltorg): Align the pool using value of "alignment"
(parse_big_immediate): New parameter "in_exp". Return
parsed expression if "in_exp" is not null.
(parse_address_main): Invoke "parse_big_immediate" for
constant parameter.
(add_to_lit_pool): Add one parameter 'nbytes'.
Split 8 byte entry into two 4 byte entry.
Add padding to align 8 byte entry to 8 byte boundary.
(encode_arm_cp_address): Generate literal pool entry if possible.
(move_or_literal_pool): Generate entry for vldr case.
(enum lit_type): New enum type.
(do_ldst): Use new enum type.
(do_ldstv4): Likewise.
(do_t_ldst): Likewise.
(neon_write_immbits): Support Thumb-2 mode.
2014-07-07 Barney Stratford <barney_stratford@fastmail.fm>
* config/tc-avr.c (avr_operand): Permit referring to r26-r31 by

View file

@ -630,6 +630,7 @@ struct asm_opcode
#define LITERAL_MASK 0xf000f000
#define OPCODE_MASK 0xfe1fffff
#define V4_STR_BIT 0x00000020
#define VLDR_VMOV_SAME 0x0040f000
#define T2_SUBS_PC_LR 0xf3de8f00
@ -792,6 +793,7 @@ typedef struct literal_pool
struct dwarf2_line_info locs [MAX_LITERAL_POOL_SIZE];
#endif
struct literal_pool * next;
unsigned int alignment;
} literal_pool;
/* Pointer to a linked list of literal pools. */
@ -3159,6 +3161,7 @@ find_or_make_literal_pool (void)
pool->sub_section = now_subseg;
pool->next = list_of_pools;
pool->symbol = NULL;
pool->alignment = 2;
/* Add it to the list. */
list_of_pools = pool;
@ -3180,33 +3183,74 @@ find_or_make_literal_pool (void)
structure to the relevant literal pool. */
static int
add_to_lit_pool (void)
add_to_lit_pool (unsigned int nbytes)
{
#define PADDING_SLOT 0x1
#define LIT_ENTRY_SIZE_MASK 0xFF
literal_pool * pool;
unsigned int entry;
unsigned int entry, pool_size = 0;
bfd_boolean padding_slot_p = FALSE;
unsigned imm1;
unsigned imm2 = 0;
if (nbytes == 8)
{
imm1 = inst.operands[1].imm;
imm2 = (inst.operands[1].regisimm ? inst.operands[1].reg
: inst.reloc.exp.X_unsigned ? 0
: ((int64_t)(imm1)) >> 32);
if (target_big_endian)
{
imm1 = imm2;
imm2 = inst.operands[1].imm;
}
}
pool = find_or_make_literal_pool ();
/* Check if this literal value is already in the pool. */
for (entry = 0; entry < pool->next_free_entry; entry ++)
{
if ((pool->literals[entry].X_op == inst.reloc.exp.X_op)
&& (inst.reloc.exp.X_op == O_constant)
&& (pool->literals[entry].X_add_number
== inst.reloc.exp.X_add_number)
&& (pool->literals[entry].X_unsigned
== inst.reloc.exp.X_unsigned))
if (nbytes == 4)
{
if ((pool->literals[entry].X_op == inst.reloc.exp.X_op)
&& (inst.reloc.exp.X_op == O_constant)
&& (pool->literals[entry].X_add_number
== inst.reloc.exp.X_add_number)
&& (pool->literals[entry].X_md == nbytes)
&& (pool->literals[entry].X_unsigned
== inst.reloc.exp.X_unsigned))
break;
if ((pool->literals[entry].X_op == inst.reloc.exp.X_op)
&& (inst.reloc.exp.X_op == O_symbol)
&& (pool->literals[entry].X_add_number
== inst.reloc.exp.X_add_number)
&& (pool->literals[entry].X_add_symbol
== inst.reloc.exp.X_add_symbol)
&& (pool->literals[entry].X_op_symbol
== inst.reloc.exp.X_op_symbol)
&& (pool->literals[entry].X_md == nbytes))
break;
}
else if ((nbytes == 8)
&& !(pool_size & 0x7)
&& ((entry + 1) != pool->next_free_entry)
&& (pool->literals[entry].X_op == O_constant)
&& (pool->literals[entry].X_add_number == imm1)
&& (pool->literals[entry].X_unsigned
== inst.reloc.exp.X_unsigned)
&& (pool->literals[entry + 1].X_op == O_constant)
&& (pool->literals[entry + 1].X_add_number == imm2)
&& (pool->literals[entry + 1].X_unsigned
== inst.reloc.exp.X_unsigned))
break;
if ((pool->literals[entry].X_op == inst.reloc.exp.X_op)
&& (inst.reloc.exp.X_op == O_symbol)
&& (pool->literals[entry].X_add_number
== inst.reloc.exp.X_add_number)
&& (pool->literals[entry].X_add_symbol
== inst.reloc.exp.X_add_symbol)
&& (pool->literals[entry].X_op_symbol
== inst.reloc.exp.X_op_symbol))
padding_slot_p = ((pool->literals[entry].X_md >> 8) == PADDING_SLOT);
if (padding_slot_p && (nbytes == 4))
break;
pool_size += 4;
}
/* Do we need to create a new entry? */
@ -3218,7 +3262,64 @@ add_to_lit_pool (void)
return FAIL;
}
pool->literals[entry] = inst.reloc.exp;
if (nbytes == 8)
{
/* For 8-byte entries, we align to an 8-byte boundary,
and split it into two 4-byte entries, because on 32-bit
host, 8-byte constants are treated as big num, thus
saved in "generic_bignum" which will be overwritten
by later assignments.
We also need to make sure there is enough space for
the split.
We also check to make sure the literal operand is a
constant number. */
if (!(inst.reloc.exp.X_op == O_constant)
|| (inst.reloc.exp.X_op == O_big))
{
inst.error = _("invalid type for literal pool");
return FAIL;
}
else if (pool_size & 0x7)
{
if ((entry + 2) >= MAX_LITERAL_POOL_SIZE)
{
inst.error = _("literal pool overflow");
return FAIL;
}
pool->literals[entry] = inst.reloc.exp;
pool->literals[entry].X_add_number = 0;
pool->literals[entry++].X_md = (PADDING_SLOT << 8) | 4;
pool->next_free_entry += 1;
pool_size += 4;
}
else if ((entry + 1) >= MAX_LITERAL_POOL_SIZE)
{
inst.error = _("literal pool overflow");
return FAIL;
}
pool->literals[entry] = inst.reloc.exp;
pool->literals[entry].X_op = O_constant;
pool->literals[entry].X_add_number = imm1;
pool->literals[entry].X_unsigned = inst.reloc.exp.X_unsigned;
pool->literals[entry++].X_md = 4;
pool->literals[entry] = inst.reloc.exp;
pool->literals[entry].X_op = O_constant;
pool->literals[entry].X_add_number = imm2;
pool->literals[entry].X_unsigned = inst.reloc.exp.X_unsigned;
pool->literals[entry].X_md = 4;
pool->alignment = 3;
pool->next_free_entry += 1;
}
else
{
pool->literals[entry] = inst.reloc.exp;
pool->literals[entry].X_md = 4;
}
#ifdef OBJ_ELF
/* PR ld/12974: Record the location of the first source line to reference
this entry in the literal pool. If it turns out during linking that the
@ -3229,9 +3330,14 @@ add_to_lit_pool (void)
#endif
pool->next_free_entry += 1;
}
else if (padding_slot_p)
{
pool->literals[entry] = inst.reloc.exp;
pool->literals[entry].X_md = nbytes;
}
inst.reloc.exp.X_op = O_symbol;
inst.reloc.exp.X_add_number = ((int) entry) * 4;
inst.reloc.exp.X_add_number = pool_size;
inst.reloc.exp.X_add_symbol = pool->symbol;
return SUCCESS;
@ -3314,7 +3420,6 @@ symbol_locate (symbolS * symbolP,
#endif /* DEBUG_SYMS */
}
static void
s_ltorg (int ignored ATTRIBUTE_UNUSED)
{
@ -3331,7 +3436,7 @@ s_ltorg (int ignored ATTRIBUTE_UNUSED)
/* Align pool as you have word accesses.
Only make a frag if we have to. */
if (!need_pass_2)
frag_align (2, 0, 0);
frag_align (pool->alignment, 0, 0);
record_alignment (now_seg, 2);
@ -3358,7 +3463,8 @@ s_ltorg (int ignored ATTRIBUTE_UNUSED)
dwarf2_gen_line_info (frag_now_fix (), pool->locs + entry);
#endif
/* First output the expression in the instruction to the pool. */
emit_expr (&(pool->literals[entry]), 4); /* .word */
emit_expr (&(pool->literals[entry]),
pool->literals[entry].X_md & LIT_ENTRY_SIZE_MASK);
}
/* Mark the pool as empty. */
@ -4669,28 +4775,31 @@ parse_immediate (char **str, int *val, int min, int max,
instructions. Puts the result directly in inst.operands[i]. */
static int
parse_big_immediate (char **str, int i)
parse_big_immediate (char **str, int i, expressionS *in_exp,
bfd_boolean allow_symbol_p)
{
expressionS exp;
expressionS *exp_p = in_exp ? in_exp : &exp;
char *ptr = *str;
my_get_expression (&exp, &ptr, GE_OPT_PREFIX_BIG);
my_get_expression (exp_p, &ptr, GE_OPT_PREFIX_BIG);
if (exp.X_op == O_constant)
if (exp_p->X_op == O_constant)
{
inst.operands[i].imm = exp.X_add_number & 0xffffffff;
inst.operands[i].imm = exp_p->X_add_number & 0xffffffff;
/* If we're on a 64-bit host, then a 64-bit number can be returned using
O_constant. We have to be careful not to break compilation for
32-bit X_add_number, though. */
if ((exp.X_add_number & ~(offsetT)(0xffffffffU)) != 0)
if ((exp_p->X_add_number & ~(offsetT)(0xffffffffU)) != 0)
{
/* X >> 32 is illegal if sizeof (exp.X_add_number) == 4. */
inst.operands[i].reg = ((exp.X_add_number >> 16) >> 16) & 0xffffffff;
/* X >> 32 is illegal if sizeof (exp_p->X_add_number) == 4. */
inst.operands[i].reg = (((exp_p->X_add_number >> 16) >> 16)
& 0xffffffff);
inst.operands[i].regisimm = 1;
}
}
else if (exp.X_op == O_big
&& LITTLENUM_NUMBER_OF_BITS * exp.X_add_number > 32)
else if (exp_p->X_op == O_big
&& LITTLENUM_NUMBER_OF_BITS * exp_p->X_add_number > 32)
{
unsigned parts = 32 / LITTLENUM_NUMBER_OF_BITS, j, idx = 0;
@ -4703,7 +4812,7 @@ parse_big_immediate (char **str, int i)
PR 11972: Bignums can now be sign-extended to the
size of a .octa so check that the out of range bits
are all zero or all one. */
if (LITTLENUM_NUMBER_OF_BITS * exp.X_add_number > 64)
if (LITTLENUM_NUMBER_OF_BITS * exp_p->X_add_number > 64)
{
LITTLENUM_TYPE m = -1;
@ -4711,7 +4820,7 @@ parse_big_immediate (char **str, int i)
&& generic_bignum[parts * 2] != m)
return FAIL;
for (j = parts * 2 + 1; j < (unsigned) exp.X_add_number; j++)
for (j = parts * 2 + 1; j < (unsigned) exp_p->X_add_number; j++)
if (generic_bignum[j] != generic_bignum[j-1])
return FAIL;
}
@ -4726,7 +4835,7 @@ parse_big_immediate (char **str, int i)
<< (LITTLENUM_NUMBER_OF_BITS * j);
inst.operands[i].regisimm = 1;
}
else
else if (!(exp_p->X_op == O_symbol && allow_symbol_p))
return FAIL;
*str = ptr;
@ -5319,10 +5428,12 @@ parse_address_main (char **str, int i, int group_relocations,
inst.operands[i].reg = REG_PC;
inst.operands[i].isreg = 1;
inst.operands[i].preind = 1;
}
/* Otherwise a load-constant pseudo op, no special treatment needed here. */
if (my_get_expression (&inst.reloc.exp, &p, GE_NO_PREFIX))
if (my_get_expression (&inst.reloc.exp, &p, GE_OPT_PREFIX_BIG))
return PARSE_OPERAND_FAIL;
}
else if (parse_big_immediate (&p, i, &inst.reloc.exp,
/*allow_symbol_p=*/TRUE))
return PARSE_OPERAND_FAIL;
*str = p;
@ -6152,7 +6263,8 @@ parse_neon_mov (char **str, int *which_operand)
Case 10: VMOV.F32 <Sd>, #<imm>
Case 11: VMOV.F64 <Dd>, #<imm> */
inst.operands[i].immisfloat = 1;
else if (parse_big_immediate (&ptr, i) == SUCCESS)
else if (parse_big_immediate (&ptr, i, NULL, /*allow_symbol_p=*/FALSE)
== SUCCESS)
/* Case 2: VMOV<c><q>.<dt> <Qd>, #<imm>
Case 3: VMOV<c><q>.<dt> <Dd>, #<imm> */
;
@ -6637,7 +6749,8 @@ parse_operands (char *str, const unsigned int *pattern, bfd_boolean thumb)
try_immbig:
/* There's a possibility of getting a 64-bit immediate here, so
we need special handling. */
if (parse_big_immediate (&str, i) == FAIL)
if (parse_big_immediate (&str, i, NULL, /*allow_symbol_p=*/FALSE)
== FAIL)
{
inst.error = _("immediate value is out of range");
goto failure;
@ -7378,6 +7491,328 @@ encode_arm_addr_mode_3 (int i, bfd_boolean is_t)
}
}
/* Write immediate bits [7:0] to the following locations:
|28/24|23 19|18 16|15 4|3 0|
| a |x x x x x|b c d|x x x x x x x x x x x x|e f g h|
This function is used by VMOV/VMVN/VORR/VBIC. */
static void
neon_write_immbits (unsigned immbits)
{
inst.instruction |= immbits & 0xf;
inst.instruction |= ((immbits >> 4) & 0x7) << 16;
inst.instruction |= ((immbits >> 7) & 0x1) << (thumb_mode ? 28 : 24);
}
/* Invert low-order SIZE bits of XHI:XLO. */
static void
neon_invert_size (unsigned *xlo, unsigned *xhi, int size)
{
unsigned immlo = xlo ? *xlo : 0;
unsigned immhi = xhi ? *xhi : 0;
switch (size)
{
case 8:
immlo = (~immlo) & 0xff;
break;
case 16:
immlo = (~immlo) & 0xffff;
break;
case 64:
immhi = (~immhi) & 0xffffffff;
/* fall through. */
case 32:
immlo = (~immlo) & 0xffffffff;
break;
default:
abort ();
}
if (xlo)
*xlo = immlo;
if (xhi)
*xhi = immhi;
}
/* True if IMM has form 0bAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD for bits
A, B, C, D. */
static int
neon_bits_same_in_bytes (unsigned imm)
{
return ((imm & 0x000000ff) == 0 || (imm & 0x000000ff) == 0x000000ff)
&& ((imm & 0x0000ff00) == 0 || (imm & 0x0000ff00) == 0x0000ff00)
&& ((imm & 0x00ff0000) == 0 || (imm & 0x00ff0000) == 0x00ff0000)
&& ((imm & 0xff000000) == 0 || (imm & 0xff000000) == 0xff000000);
}
/* For immediate of above form, return 0bABCD. */
static unsigned
neon_squash_bits (unsigned imm)
{
return (imm & 0x01) | ((imm & 0x0100) >> 7) | ((imm & 0x010000) >> 14)
| ((imm & 0x01000000) >> 21);
}
/* Compress quarter-float representation to 0b...000 abcdefgh. */
static unsigned
neon_qfloat_bits (unsigned imm)
{
return ((imm >> 19) & 0x7f) | ((imm >> 24) & 0x80);
}
/* Returns CMODE. IMMBITS [7:0] is set to bits suitable for inserting into
the instruction. *OP is passed as the initial value of the op field, and
may be set to a different value depending on the constant (i.e.
"MOV I64, 0bAAAAAAAABBBB..." which uses OP = 1 despite being MOV not
MVN). If the immediate looks like a repeated pattern then also
try smaller element sizes. */
static int
neon_cmode_for_move_imm (unsigned immlo, unsigned immhi, int float_p,
unsigned *immbits, int *op, int size,
enum neon_el_type type)
{
/* Only permit float immediates (including 0.0/-0.0) if the operand type is
float. */
if (type == NT_float && !float_p)
return FAIL;
if (type == NT_float && is_quarter_float (immlo) && immhi == 0)
{
if (size != 32 || *op == 1)
return FAIL;
*immbits = neon_qfloat_bits (immlo);
return 0xf;
}
if (size == 64)
{
if (neon_bits_same_in_bytes (immhi)
&& neon_bits_same_in_bytes (immlo))
{
if (*op == 1)
return FAIL;
*immbits = (neon_squash_bits (immhi) << 4)
| neon_squash_bits (immlo);
*op = 1;
return 0xe;
}
if (immhi != immlo)
return FAIL;
}
if (size >= 32)
{
if (immlo == (immlo & 0x000000ff))
{
*immbits = immlo;
return 0x0;
}
else if (immlo == (immlo & 0x0000ff00))
{
*immbits = immlo >> 8;
return 0x2;
}
else if (immlo == (immlo & 0x00ff0000))
{
*immbits = immlo >> 16;
return 0x4;
}
else if (immlo == (immlo & 0xff000000))
{
*immbits = immlo >> 24;
return 0x6;
}
else if (immlo == ((immlo & 0x0000ff00) | 0x000000ff))
{
*immbits = (immlo >> 8) & 0xff;
return 0xc;
}
else if (immlo == ((immlo & 0x00ff0000) | 0x0000ffff))
{
*immbits = (immlo >> 16) & 0xff;
return 0xd;
}
if ((immlo & 0xffff) != (immlo >> 16))
return FAIL;
immlo &= 0xffff;
}
if (size >= 16)
{
if (immlo == (immlo & 0x000000ff))
{
*immbits = immlo;
return 0x8;
}
else if (immlo == (immlo & 0x0000ff00))
{
*immbits = immlo >> 8;
return 0xa;
}
if ((immlo & 0xff) != (immlo >> 8))
return FAIL;
immlo &= 0xff;
}
if (immlo == (immlo & 0x000000ff))
{
/* Don't allow MVN with 8-bit immediate. */
if (*op == 1)
return FAIL;
*immbits = immlo;
return 0xe;
}
return FAIL;
}
enum lit_type
{
CONST_THUMB,
CONST_ARM,
CONST_VEC
};
/* inst.reloc.exp describes an "=expr" load pseudo-operation.
Determine whether it can be performed with a move instruction; if
it can, convert inst.instruction to that move instruction and
return TRUE; if it can't, convert inst.instruction to a literal-pool
load and return FALSE. If this is not a valid thing to do in the
current context, set inst.error and return TRUE.
inst.operands[i] describes the destination register. */
static bfd_boolean
move_or_literal_pool (int i, enum lit_type t, bfd_boolean mode_3)
{
unsigned long tbit;
bfd_boolean thumb_p = (t == CONST_THUMB);
bfd_boolean arm_p = (t == CONST_ARM);
bfd_boolean vec64_p = (t == CONST_VEC) && !inst.operands[i].issingle;
if (thumb_p)
tbit = (inst.instruction > 0xffff) ? THUMB2_LOAD_BIT : THUMB_LOAD_BIT;
else
tbit = LOAD_BIT;
if ((inst.instruction & tbit) == 0)
{
inst.error = _("invalid pseudo operation");
return TRUE;
}
if (inst.reloc.exp.X_op != O_constant
&& inst.reloc.exp.X_op != O_symbol
&& inst.reloc.exp.X_op != O_big)
{
inst.error = _("constant expression expected");
return TRUE;
}
if ((inst.reloc.exp.X_op == O_constant
|| inst.reloc.exp.X_op == O_big)
&& !inst.operands[i].issingle)
{
if (thumb_p && inst.reloc.exp.X_op == O_constant)
{
if (!unified_syntax && (inst.reloc.exp.X_add_number & ~0xFF) == 0)
{
/* This can be done with a mov(1) instruction. */
inst.instruction = T_OPCODE_MOV_I8 | (inst.operands[i].reg << 8);
inst.instruction |= inst.reloc.exp.X_add_number;
return TRUE;
}
}
else if (arm_p && inst.reloc.exp.X_op == O_constant)
{
int value = encode_arm_immediate (inst.reloc.exp.X_add_number);
if (value != FAIL)
{
/* This can be done with a mov instruction. */
inst.instruction &= LITERAL_MASK;
inst.instruction |= INST_IMMEDIATE | (OPCODE_MOV << DATA_OP_SHIFT);
inst.instruction |= value & 0xfff;
return TRUE;
}
value = encode_arm_immediate (~inst.reloc.exp.X_add_number);
if (value != FAIL)
{
/* This can be done with a mvn instruction. */
inst.instruction &= LITERAL_MASK;
inst.instruction |= INST_IMMEDIATE | (OPCODE_MVN << DATA_OP_SHIFT);
inst.instruction |= value & 0xfff;
return TRUE;
}
}
else if (vec64_p)
{
int op = 0;
unsigned immbits = 0;
unsigned immlo = inst.operands[1].imm;
unsigned immhi = inst.operands[1].regisimm
? inst.operands[1].reg
: inst.reloc.exp.X_unsigned
? 0
: ((int64_t)((int) immlo)) >> 32;
int cmode = neon_cmode_for_move_imm (immlo, immhi, FALSE, &immbits,
&op, 64, NT_invtype);
if (cmode == FAIL)
{
neon_invert_size (&immlo, &immhi, 64);
op = !op;
cmode = neon_cmode_for_move_imm (immlo, immhi, FALSE, &immbits,
&op, 64, NT_invtype);
}
if (cmode != FAIL)
{
inst.instruction = (inst.instruction & VLDR_VMOV_SAME)
| (1 << 23)
| (cmode << 8)
| (op << 5)
| (1 << 4);
/* Fill other bits in vmov encoding for both thumb and arm. */
if (thumb_mode)
inst.instruction |= (0x7 << 29) | (0xF << 24);
else
inst.instruction |= (0xF << 28) | (0x1 << 25);
neon_write_immbits (immbits);
return TRUE;
}
}
}
if (add_to_lit_pool ((!inst.operands[i].isvec
|| inst.operands[i].issingle) ? 4 : 8) == FAIL)
return TRUE;
inst.operands[1].reg = REG_PC;
inst.operands[1].isreg = 1;
inst.operands[1].preind = 1;
inst.reloc.pc_rel = 1;
inst.reloc.type = (thumb_p
? BFD_RELOC_ARM_THUMB_OFFSET
: (mode_3
? BFD_RELOC_ARM_HWLITERAL
: BFD_RELOC_ARM_LITERAL));
return FALSE;
}
/* inst.operands[i] was set up by parse_address. Encode it into an
ARM-format instruction. Reject all forms which cannot be encoded
into a coprocessor load/store instruction. If wb_ok is false,
@ -7389,6 +7824,13 @@ encode_arm_addr_mode_3 (int i, bfd_boolean is_t)
static int
encode_arm_cp_address (int i, int wb_ok, int unind_ok, int reloc_override)
{
if (!inst.operands[i].isreg)
{
gas_assert (inst.operands[0].isvec);
if (move_or_literal_pool (0, CONST_VEC, /*mode_3=*/FALSE))
return SUCCESS;
}
inst.instruction |= inst.operands[i].reg << 16;
gas_assert (!(inst.operands[i].preind && inst.operands[i].postind));
@ -7443,88 +7885,6 @@ encode_arm_cp_address (int i, int wb_ok, int unind_ok, int reloc_override)
return SUCCESS;
}
/* inst.reloc.exp describes an "=expr" load pseudo-operation.
Determine whether it can be performed with a move instruction; if
it can, convert inst.instruction to that move instruction and
return TRUE; if it can't, convert inst.instruction to a literal-pool
load and return FALSE. If this is not a valid thing to do in the
current context, set inst.error and return TRUE.
inst.operands[i] describes the destination register. */
static bfd_boolean
move_or_literal_pool (int i, bfd_boolean thumb_p, bfd_boolean mode_3)
{
unsigned long tbit;
if (thumb_p)
tbit = (inst.instruction > 0xffff) ? THUMB2_LOAD_BIT : THUMB_LOAD_BIT;
else
tbit = LOAD_BIT;
if ((inst.instruction & tbit) == 0)
{
inst.error = _("invalid pseudo operation");
return TRUE;
}
if (inst.reloc.exp.X_op != O_constant && inst.reloc.exp.X_op != O_symbol)
{
inst.error = _("constant expression expected");
return TRUE;
}
if (inst.reloc.exp.X_op == O_constant)
{
if (thumb_p)
{
if (!unified_syntax && (inst.reloc.exp.X_add_number & ~0xFF) == 0)
{
/* This can be done with a mov(1) instruction. */
inst.instruction = T_OPCODE_MOV_I8 | (inst.operands[i].reg << 8);
inst.instruction |= inst.reloc.exp.X_add_number;
return TRUE;
}
}
else
{
int value = encode_arm_immediate (inst.reloc.exp.X_add_number);
if (value != FAIL)
{
/* This can be done with a mov instruction. */
inst.instruction &= LITERAL_MASK;
inst.instruction |= INST_IMMEDIATE | (OPCODE_MOV << DATA_OP_SHIFT);
inst.instruction |= value & 0xfff;
return TRUE;
}
value = encode_arm_immediate (~inst.reloc.exp.X_add_number);
if (value != FAIL)
{
/* This can be done with a mvn instruction. */
inst.instruction &= LITERAL_MASK;
inst.instruction |= INST_IMMEDIATE | (OPCODE_MVN << DATA_OP_SHIFT);
inst.instruction |= value & 0xfff;
return TRUE;
}
}
}
if (add_to_lit_pool () == FAIL)
{
inst.error = _("literal pool insertion failed");
return TRUE;
}
inst.operands[1].reg = REG_PC;
inst.operands[1].isreg = 1;
inst.operands[1].preind = 1;
inst.reloc.pc_rel = 1;
inst.reloc.type = (thumb_p
? BFD_RELOC_ARM_THUMB_OFFSET
: (mode_3
? BFD_RELOC_ARM_HWLITERAL
: BFD_RELOC_ARM_LITERAL));
return FALSE;
}
/* Functions for instruction encoding, sorted by sub-architecture.
First some generics; their names are taken from the conventional
bit positions for register arguments in ARM format instructions. */
@ -8255,7 +8615,7 @@ do_ldst (void)
{
inst.instruction |= inst.operands[0].reg << 12;
if (!inst.operands[1].isreg)
if (move_or_literal_pool (0, /*thumb_p=*/FALSE, /*mode_3=*/FALSE))
if (move_or_literal_pool (0, CONST_ARM, /*mode_3=*/FALSE))
return;
encode_arm_addr_mode_2 (1, /*is_t=*/FALSE);
check_ldr_r15_aligned ();
@ -8288,7 +8648,7 @@ do_ldstv4 (void)
constraint (inst.operands[0].reg == REG_PC, BAD_PC);
inst.instruction |= inst.operands[0].reg << 12;
if (!inst.operands[1].isreg)
if (move_or_literal_pool (0, /*thumb_p=*/FALSE, /*mode_3=*/TRUE))
if (move_or_literal_pool (0, CONST_ARM, /*mode_3=*/TRUE))
return;
encode_arm_addr_mode_3 (1, /*is_t=*/FALSE);
}
@ -10832,7 +11192,7 @@ do_t_ldst (void)
{
if (opcode <= 0xffff)
inst.instruction = THUMB_OP32 (opcode);
if (move_or_literal_pool (0, /*thumb_p=*/TRUE, /*mode_3=*/FALSE))
if (move_or_literal_pool (0, CONST_THUMB, /*mode_3=*/FALSE))
return;
}
if (inst.operands[1].isreg
@ -10938,7 +11298,7 @@ do_t_ldst (void)
inst.instruction = THUMB_OP16 (inst.instruction);
if (!inst.operands[1].isreg)
if (move_or_literal_pool (0, /*thumb_p=*/TRUE, /*mode_3=*/FALSE))
if (move_or_literal_pool (0, CONST_THUMB, /*mode_3=*/FALSE))
return;
constraint (!inst.operands[1].preind
@ -13819,197 +14179,6 @@ neon_cmode_for_logic_imm (unsigned immediate, unsigned *immbits, int size)
return FAIL;
}
/* True if IMM has form 0bAAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD for bits
A, B, C, D. */
static int
neon_bits_same_in_bytes (unsigned imm)
{
return ((imm & 0x000000ff) == 0 || (imm & 0x000000ff) == 0x000000ff)
&& ((imm & 0x0000ff00) == 0 || (imm & 0x0000ff00) == 0x0000ff00)
&& ((imm & 0x00ff0000) == 0 || (imm & 0x00ff0000) == 0x00ff0000)
&& ((imm & 0xff000000) == 0 || (imm & 0xff000000) == 0xff000000);
}
/* For immediate of above form, return 0bABCD. */
static unsigned
neon_squash_bits (unsigned imm)
{
return (imm & 0x01) | ((imm & 0x0100) >> 7) | ((imm & 0x010000) >> 14)
| ((imm & 0x01000000) >> 21);
}
/* Compress quarter-float representation to 0b...000 abcdefgh. */
static unsigned
neon_qfloat_bits (unsigned imm)
{
return ((imm >> 19) & 0x7f) | ((imm >> 24) & 0x80);
}
/* Returns CMODE. IMMBITS [7:0] is set to bits suitable for inserting into
the instruction. *OP is passed as the initial value of the op field, and
may be set to a different value depending on the constant (i.e.
"MOV I64, 0bAAAAAAAABBBB..." which uses OP = 1 despite being MOV not
MVN). If the immediate looks like a repeated pattern then also
try smaller element sizes. */
static int
neon_cmode_for_move_imm (unsigned immlo, unsigned immhi, int float_p,
unsigned *immbits, int *op, int size,
enum neon_el_type type)
{
/* Only permit float immediates (including 0.0/-0.0) if the operand type is
float. */
if (type == NT_float && !float_p)
return FAIL;
if (type == NT_float && is_quarter_float (immlo) && immhi == 0)
{
if (size != 32 || *op == 1)
return FAIL;
*immbits = neon_qfloat_bits (immlo);
return 0xf;
}
if (size == 64)
{
if (neon_bits_same_in_bytes (immhi)
&& neon_bits_same_in_bytes (immlo))
{
if (*op == 1)
return FAIL;
*immbits = (neon_squash_bits (immhi) << 4)
| neon_squash_bits (immlo);
*op = 1;
return 0xe;
}
if (immhi != immlo)
return FAIL;
}
if (size >= 32)
{
if (immlo == (immlo & 0x000000ff))
{
*immbits = immlo;
return 0x0;
}
else if (immlo == (immlo & 0x0000ff00))
{
*immbits = immlo >> 8;
return 0x2;
}
else if (immlo == (immlo & 0x00ff0000))
{
*immbits = immlo >> 16;
return 0x4;
}
else if (immlo == (immlo & 0xff000000))
{
*immbits = immlo >> 24;
return 0x6;
}
else if (immlo == ((immlo & 0x0000ff00) | 0x000000ff))
{
*immbits = (immlo >> 8) & 0xff;
return 0xc;
}
else if (immlo == ((immlo & 0x00ff0000) | 0x0000ffff))
{
*immbits = (immlo >> 16) & 0xff;
return 0xd;
}
if ((immlo & 0xffff) != (immlo >> 16))
return FAIL;
immlo &= 0xffff;
}
if (size >= 16)
{
if (immlo == (immlo & 0x000000ff))
{
*immbits = immlo;
return 0x8;
}
else if (immlo == (immlo & 0x0000ff00))
{
*immbits = immlo >> 8;
return 0xa;
}
if ((immlo & 0xff) != (immlo >> 8))
return FAIL;
immlo &= 0xff;
}
if (immlo == (immlo & 0x000000ff))
{
/* Don't allow MVN with 8-bit immediate. */
if (*op == 1)
return FAIL;
*immbits = immlo;
return 0xe;
}
return FAIL;
}
/* Write immediate bits [7:0] to the following locations:
|28/24|23 19|18 16|15 4|3 0|
| a |x x x x x|b c d|x x x x x x x x x x x x|e f g h|
This function is used by VMOV/VMVN/VORR/VBIC. */
static void
neon_write_immbits (unsigned immbits)
{
inst.instruction |= immbits & 0xf;
inst.instruction |= ((immbits >> 4) & 0x7) << 16;
inst.instruction |= ((immbits >> 7) & 0x1) << 24;
}
/* Invert low-order SIZE bits of XHI:XLO. */
static void
neon_invert_size (unsigned *xlo, unsigned *xhi, int size)
{
unsigned immlo = xlo ? *xlo : 0;
unsigned immhi = xhi ? *xhi : 0;
switch (size)
{
case 8:
immlo = (~immlo) & 0xff;
break;
case 16:
immlo = (~immlo) & 0xffff;
break;
case 64:
immhi = (~immhi) & 0xffffffff;
/* fall through. */
case 32:
immlo = (~immlo) & 0xffffffff;
break;
default:
abort ();
}
if (xlo)
*xlo = immlo;
if (xhi)
*xhi = immhi;
}
static void
do_neon_logic (void)
{

View file

@ -1,3 +1,24 @@
2014-07-08 Jiong Wang <jiong.wang@arm.com>
* gas/arm/ldconst.s: Add test cases for symbol literal.
* gas/arm/ldconst.d: Likewise.
* gas/arm/vldconst.s: Add test cases for vldr.
* gas/arm/thumb2_vpool.s: Likewise.
* gas/arm/vldconst.d: New pattern for little-endian.
* gas/arm/thumb2_vpool.d: Likewise.
* gas/arm/vldconst_be.d: New pattern for big-endian.
* gas/arm/thumb2_vpool_be.d: Likewise.
* gas/arm/armv8-a+crypto.d: Skip for non-ELF targets.
* gas/arm/armv8-a+fp.d: Likewise.
* gas/arm/armv8-a+simd.d: Likewise.
* gas/arm/armv8-a-barrier-thumb.d: Likewise.
* gas/arm/bl-local-2.d: Likewise.
* gas/arm/ldgesb-bad.d: Likewise.
* gas/arm/ldgesh-bad.d: Likewise.
* gas/arm/thumb2_pool.d: Likewise.
* gas/arm/thumb2_pool.s: Likewise.
2014-06-17 Jiong Wang <jiong.wang@arm.com>
* gas/arm/armv8-a-it-bad.s: New check for deprecated sp_inc/dec within

View file

@ -1,5 +1,6 @@
#name: Valid v8-a+cryptov1
#objdump: -dr --prefix-addresses --show-raw-insn
#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
.*: +file format .*arm.*

View file

@ -1,5 +1,6 @@
#name: Valid v8-a+fp
#objdump: -dr --prefix-addresses --show-raw-insn
#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
.*: +file format .*arm.*

View file

@ -1,5 +1,6 @@
#name: Valid v8-a+simdv3
#objdump: -dr --prefix-addresses --show-raw-insn
#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
.*: +file format .*arm.*

View file

@ -2,6 +2,7 @@
#as: -march=armv8-a -mthumb
#source: armv8-a-barrier.s
#objdump: -dr --prefix-addresses --show-raw-insn
#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
.*: +file format .*arm.*

View file

@ -1,5 +1,6 @@
#name: bl local conversion to blx
#objdump: -drw --prefix-addresses --show-raw-insn
#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
#as:

View file

@ -1,6 +1,7 @@
#objdump: -dr --prefix-addresses --show-raw-insn
#name: ARM ldr with immediate constant
#as: -mcpu=arm7m -EL
# skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
.*: +file format .*arm.*
@ -25,3 +26,17 @@ Disassembly of section .text:
0+44 <[^>]*> 43e0b0ff ? mvnmi fp, #255 ; 0xff
0+48 <[^>]*> 451fb004 ? ldrmi fp, \[pc, #-4\] ; 0+4c <[^>]*>
0+4c <[^>]*> 0000fff0 ? .*
0+50 <[^>]*> e59f0020 ? ldr r0, \[pc, #32\] ; 0+78 <[^>]*>
0+54 <[^>]*> e59f301c ? ldr r3, \[pc, #28\] ; 0+78 <[^>]*>
0+58 <[^>]*> e59f8018 ? ldr r8, \[pc, #24\] ; 0+78 <[^>]*>
0+5c <[^>]*> e59fb014 ? ldr fp, \[pc, #20\] ; 0+78 <[^>]*>
0+60 <[^>]*> e59fe010 ? ldr lr, \[pc, #16\] ; 0+78 <[^>]*>
0+64 <[^>]*> e59f0010 ? ldr r0, \[pc, #16\] ; 0+7c <[^>]*>
0+68 <[^>]*> e59f300c ? ldr r3, \[pc, #12\] ; 0+7c <[^>]*>
0+6c <[^>]*> e59f8008 ? ldr r8, \[pc, #8\] ; 0+7c <[^>]*>
0+70 <[^>]*> e59fb004 ? ldr fp, \[pc, #4\] ; 0+7c <[^>]*>
0+74 <[^>]*> e51fe000 ? ldr lr, \[pc, #-0\] ; 0+7c <[^>]*>
0+78 <[^>]*> 00000000 .word 0x00000000
78: R_ARM_ABS32 ext_symbol
0+7c <[^>]*> 00001000 .word 0x00001000
7c: R_ARM_ABS32 ext_symbol

View file

@ -26,3 +26,14 @@ foo:
ldrmi r11, =0xffffff00
ldrmi r11, =0x0000fff0
.pool
# test symbol literal support.
.macro ldrs const
.irp regindex, 0, 3, 8, 11, 14
ldr r\regindex, \const
.endr
.endm
ldrs "=ext_symbol"
ldrs "=ext_symbol + 0x1000"
.pool

View file

@ -1,3 +1,4 @@
# name: Reject ld<cc>sb instructions
# as: -march=armv7-a
# error-output: ldgesb-bad.l
# skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd

View file

@ -1,3 +1,4 @@
# name: Reject ld<cc>sh instructions
# as: -march=armv7-a
# error-output: ldgesh-bad.l
# skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd

View file

@ -14,3 +14,18 @@ Disassembly of section .text:
0+00e <[^>]+> f8df 5004 ldr\.w r5, \[pc, #4\] ; 00+14 <[^>]+>
0+012 <[^>]+> 4900 ldr r1, \[pc, #0\] ; \(00+14 <[^>]+>\)
0+014 <[^>]+> 12345678 ? .word 0x12345678
0+018 <[^>]+> 4907 ldr r1, \[pc, #28\] ; \(00000038 <[^>]+>\)
0+01a <[^>]+> 4c07 ldr r4, \[pc, #28\] ; \(00000038 <[^>]+>\)
0+01c <[^>]+> f8df 9018 ldr.w r9, \[pc, #24\] ; 00000038 <[^>]+>
0+020 <[^>]+> f8df c014 ldr.w ip, \[pc, #20\] ; 00000038 <[^>]+>
0+024 <[^>]+> f8df d010 ldr.w sp, \[pc, #16\] ; 00000038 <[^>]+>
0+028 <[^>]+> 4904 ldr r1, \[pc, #16\] ; \(0000003c <[^>]+>\)
0+02a <[^>]+> 4c04 ldr r4, \[pc, #16\] ; \(0000003c <[^>]+>\)
0+02c <[^>]+> f8df 900c ldr.w r9, \[pc, #12\] ; 0000003c <[^>]+>
0+030 <[^>]+> f8df c008 ldr.w ip, \[pc, #8\] ; 0000003c <[^>]+>
0+034 <[^>]+> f8df d004 ldr.w sp, \[pc, #4\] ; 0000003c <[^>]+>
0+038 <[^>]+> 00000000 .word 0x00000000
38: R_ARM_ABS32 ext_symbol
0+03c <[^>]+> 00001000 .word 0x00001000
3c: R_ARM_ABS32 ext_symbol

View file

@ -11,3 +11,14 @@ thumb2_ldr:
ldr.w r5, =0x12345678
ldr r1, =0x12345678
.pool
# test symbol literal support.
.macro ldrs const
.irp regindex, 1, 4, 9, 12, 13
ldr r\regindex, \const
.endr
.endm
ldrs "=ext_symbol"
ldrs "=ext_symbol + 0x1000"
.pool

View file

@ -0,0 +1,169 @@
# as: -march=armv6t2 -EL
# objdump: -dr --prefix-addresses --show-raw-insn
# This test is only valid on ELF based ports.
#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
#name: Thumb2 vldr with immediate constant
.*: +file format .*arm.*
Disassembly of section .text:
00000000 <thumb2_ldr> ed9f 0a0f vldr s0, \[pc, #60\] ; 00000040 <thumb2_ldr\+0x40>
00000004 <thumb2_ldr\+0x4> ed9f 7a0e vldr s14, \[pc, #56\] ; 00000040 <thumb2_ldr\+0x40>
00000008 <thumb2_ldr\+0x8> ed9f ea0d vldr s28, \[pc, #52\] ; 00000040 <thumb2_ldr\+0x40>
0000000c <thumb2_ldr\+0xc> eddf fa0c vldr s31, \[pc, #48\] ; 00000040 <thumb2_ldr\+0x40>
00000010 <thumb2_ldr\+0x10> ed9f 0a0c vldr s0, \[pc, #48\] ; 00000044 <thumb2_ldr\+0x44>
00000014 <thumb2_ldr\+0x14> ed9f 7a0b vldr s14, \[pc, #44\] ; 00000044 <thumb2_ldr\+0x44>
00000018 <thumb2_ldr\+0x18> ed9f ea0a vldr s28, \[pc, #40\] ; 00000044 <thumb2_ldr\+0x44>
0000001c <thumb2_ldr\+0x1c> eddf fa09 vldr s31, \[pc, #36\] ; 00000044 <thumb2_ldr\+0x44>
00000020 <thumb2_ldr\+0x20> ed9f 0a09 vldr s0, \[pc, #36\] ; 00000048 <thumb2_ldr\+0x48>
00000024 <thumb2_ldr\+0x24> ed9f 7a08 vldr s14, \[pc, #32\] ; 00000048 <thumb2_ldr\+0x48>
00000028 <thumb2_ldr\+0x28> ed9f ea07 vldr s28, \[pc, #28\] ; 00000048 <thumb2_ldr\+0x48>
0000002c <thumb2_ldr\+0x2c> eddf fa06 vldr s31, \[pc, #24\] ; 00000048 <thumb2_ldr\+0x48>
00000030 <thumb2_ldr\+0x30> ed9f 0a06 vldr s0, \[pc, #24\] ; 0000004c <thumb2_ldr\+0x4c>
00000034 <thumb2_ldr\+0x34> ed9f 7a05 vldr s14, \[pc, #20\] ; 0000004c <thumb2_ldr\+0x4c>
00000038 <thumb2_ldr\+0x38> ed9f ea04 vldr s28, \[pc, #16\] ; 0000004c <thumb2_ldr\+0x4c>
0000003c <thumb2_ldr\+0x3c> eddf fa03 vldr s31, \[pc, #12\] ; 0000004c <thumb2_ldr\+0x4c>
00000040 <thumb2_ldr\+0x40> 00000000 .word 0x00000000
00000044 <thumb2_ldr\+0x44> ff000000 .word 0xff000000
00000048 <thumb2_ldr\+0x48> ffffffff .word 0xffffffff
0000004c <thumb2_ldr\+0x4c> 0fff0000 .word 0x0fff0000
00000050 <thumb2_ldr\+0x50> ed9f 0a0f vldr s0, \[pc, #60\] ; 00000090 <thumb2_ldr\+0x90>
00000054 <thumb2_ldr\+0x54> ed9f 7a0e vldr s14, \[pc, #56\] ; 00000090 <thumb2_ldr\+0x90>
00000058 <thumb2_ldr\+0x58> ed9f ea0d vldr s28, \[pc, #52\] ; 00000090 <thumb2_ldr\+0x90>
0000005c <thumb2_ldr\+0x5c> eddf fa0c vldr s31, \[pc, #48\] ; 00000090 <thumb2_ldr\+0x90>
00000060 <thumb2_ldr\+0x60> ed9f 0a0c vldr s0, \[pc, #48\] ; 00000094 <thumb2_ldr\+0x94>
00000064 <thumb2_ldr\+0x64> ed9f 7a0b vldr s14, \[pc, #44\] ; 00000094 <thumb2_ldr\+0x94>
00000068 <thumb2_ldr\+0x68> ed9f ea0a vldr s28, \[pc, #40\] ; 00000094 <thumb2_ldr\+0x94>
0000006c <thumb2_ldr\+0x6c> eddf fa09 vldr s31, \[pc, #36\] ; 00000094 <thumb2_ldr\+0x94>
00000070 <thumb2_ldr\+0x70> ed9f 0a09 vldr s0, \[pc, #36\] ; 00000098 <thumb2_ldr\+0x98>
00000074 <thumb2_ldr\+0x74> ed9f 7a08 vldr s14, \[pc, #32\] ; 00000098 <thumb2_ldr\+0x98>
00000078 <thumb2_ldr\+0x78> ed9f ea07 vldr s28, \[pc, #28\] ; 00000098 <thumb2_ldr\+0x98>
0000007c <thumb2_ldr\+0x7c> eddf fa06 vldr s31, \[pc, #24\] ; 00000098 <thumb2_ldr\+0x98>
00000080 <thumb2_ldr\+0x80> ed9f 0a06 vldr s0, \[pc, #24\] ; 0000009c <thumb2_ldr\+0x9c>
00000084 <thumb2_ldr\+0x84> ed9f 7a05 vldr s14, \[pc, #20\] ; 0000009c <thumb2_ldr\+0x9c>
00000088 <thumb2_ldr\+0x88> ed9f ea04 vldr s28, \[pc, #16\] ; 0000009c <thumb2_ldr\+0x9c>
0000008c <thumb2_ldr\+0x8c> eddf fa03 vldr s31, \[pc, #12\] ; 0000009c <thumb2_ldr\+0x9c>
00000090 <thumb2_ldr\+0x90> 00000000 .word 0x00000000
00000094 <thumb2_ldr\+0x94> 00ff0000 .word 0x00ff0000
00000098 <thumb2_ldr\+0x98> ff00ffff .word 0xff00ffff
0000009c <thumb2_ldr\+0x9c> 00fff000 .word 0x00fff000
000000a0 <thumb2_ldr\+0xa0> ef80 0e30 vmov.i64 d0, #0x0000000000000000
000000a4 <thumb2_ldr\+0xa4> ef80 ee30 vmov.i64 d14, #0x0000000000000000
000000a8 <thumb2_ldr\+0xa8> efc0 ce30 vmov.i64 d28, #0x0000000000000000
000000ac <thumb2_ldr\+0xac> efc0 fe30 vmov.i64 d31, #0x0000000000000000
000000b0 <thumb2_ldr\+0xb0> ed9f 0b0b vldr d0, \[pc, #44\] ; 000000e0 <thumb2_ldr\+0xe0>
000000b4 <thumb2_ldr\+0xb4> ed9f eb0a vldr d14, \[pc, #40\] ; 000000e0 <thumb2_ldr\+0xe0>
000000b8 <thumb2_ldr\+0xb8> eddf cb09 vldr d28, \[pc, #36\] ; 000000e0 <thumb2_ldr\+0xe0>
000000bc <thumb2_ldr\+0xbc> eddf fb08 vldr d31, \[pc, #32\] ; 000000e0 <thumb2_ldr\+0xe0>
000000c0 <thumb2_ldr\+0xc0> ff87 0e3f vmov.i64 d0, #0xffffffffffffffff
000000c4 <thumb2_ldr\+0xc4> ff87 ee3f vmov.i64 d14, #0xffffffffffffffff
000000c8 <thumb2_ldr\+0xc8> ffc7 ce3f vmov.i64 d28, #0xffffffffffffffff
000000cc <thumb2_ldr\+0xcc> ffc7 fe3f vmov.i64 d31, #0xffffffffffffffff
000000d0 <thumb2_ldr\+0xd0> ed9f 0b05 vldr d0, \[pc, #20\] ; 000000e8 <thumb2_ldr\+0xe8>
000000d4 <thumb2_ldr\+0xd4> ed9f eb04 vldr d14, \[pc, #16\] ; 000000e8 <thumb2_ldr\+0xe8>
000000d8 <thumb2_ldr\+0xd8> eddf cb03 vldr d28, \[pc, #12\] ; 000000e8 <thumb2_ldr\+0xe8>
000000dc <thumb2_ldr\+0xdc> eddf fb02 vldr d31, \[pc, #8\] ; 000000e8 <thumb2_ldr\+0xe8>
000000e0 <thumb2_ldr\+0xe0> ca000000 .word 0xca000000
000000e4 <thumb2_ldr\+0xe4> 00000000 .word 0x00000000
000000e8 <thumb2_ldr\+0xe8> 0fff0000 .word 0x0fff0000
000000ec <thumb2_ldr\+0xec> 00000000 .word 0x00000000
000000f0 <thumb2_ldr\+0xf0> ef80 0e30 vmov.i64 d0, #0x0000000000000000
000000f4 <thumb2_ldr\+0xf4> ef80 ee30 vmov.i64 d14, #0x0000000000000000
000000f8 <thumb2_ldr\+0xf8> efc0 ce30 vmov.i64 d28, #0x0000000000000000
000000fc <thumb2_ldr\+0xfc> efc0 fe30 vmov.i64 d31, #0x0000000000000000
00000100 <thumb2_ldr\+0x100> ef80 0e34 vmov.i64 d0, #0x0000000000ff0000
00000104 <thumb2_ldr\+0x104> ef80 ee34 vmov.i64 d14, #0x0000000000ff0000
00000108 <thumb2_ldr\+0x108> efc0 ce34 vmov.i64 d28, #0x0000000000ff0000
0000010c <thumb2_ldr\+0x10c> efc0 fe34 vmov.i64 d31, #0x0000000000ff0000
00000110 <thumb2_ldr\+0x110> ef80 0e39 vmov.i64 d0, #0x00000000ff0000ff
00000114 <thumb2_ldr\+0x114> ef80 ee39 vmov.i64 d14, #0x00000000ff0000ff
00000118 <thumb2_ldr\+0x118> efc0 ce39 vmov.i64 d28, #0x00000000ff0000ff
0000011c <thumb2_ldr\+0x11c> efc0 fe39 vmov.i64 d31, #0x00000000ff0000ff
00000120 <thumb2_ldr\+0x120> ed9f 0b03 vldr d0, \[pc, #12\] ; 00000130 <thumb2_ldr\+0x130>
00000124 <thumb2_ldr\+0x124> ed9f eb02 vldr d14, \[pc, #8\] ; 00000130 <thumb2_ldr\+0x130>
00000128 <thumb2_ldr\+0x128> eddf cb01 vldr d28, \[pc, #4\] ; 00000130 <thumb2_ldr\+0x130>
0000012c <thumb2_ldr\+0x12c> eddf fb00 vldr d31, \[pc\] ; 00000130 <thumb2_ldr\+0x130>
00000130 <thumb2_ldr\+0x130> 00fff000 .word 0x00fff000
00000134 <thumb2_ldr\+0x134> 00000000 .word 0x00000000
00000138 <thumb2_ldr\+0x138> ef80 0e30 vmov.i64 d0, #0x0000000000000000
0000013c <thumb2_ldr\+0x13c> ef80 ee30 vmov.i64 d14, #0x0000000000000000
00000140 <thumb2_ldr\+0x140> efc0 ce30 vmov.i64 d28, #0x0000000000000000
00000144 <thumb2_ldr\+0x144> efc0 fe30 vmov.i64 d31, #0x0000000000000000
00000148 <thumb2_ldr\+0x148> ff80 0e30 vmov.i64 d0, #0xff00000000000000
0000014c <thumb2_ldr\+0x14c> ff80 ee30 vmov.i64 d14, #0xff00000000000000
00000150 <thumb2_ldr\+0x150> ffc0 ce30 vmov.i64 d28, #0xff00000000000000
00000154 <thumb2_ldr\+0x154> ffc0 fe30 vmov.i64 d31, #0xff00000000000000
00000158 <thumb2_ldr\+0x158> ff87 0e3f vmov.i64 d0, #0xffffffffffffffff
0000015c <thumb2_ldr\+0x15c> ff87 ee3f vmov.i64 d14, #0xffffffffffffffff
00000160 <thumb2_ldr\+0x160> ffc7 ce3f vmov.i64 d28, #0xffffffffffffffff
00000164 <thumb2_ldr\+0x164> ffc7 fe3f vmov.i64 d31, #0xffffffffffffffff
00000168 <thumb2_ldr\+0x168> ed9f 0b03 vldr d0, \[pc, #12\] ; 00000178 <thumb2_ldr\+0x178>
0000016c <thumb2_ldr\+0x16c> ed9f eb02 vldr d14, \[pc, #8\] ; 00000178 <thumb2_ldr\+0x178>
00000170 <thumb2_ldr\+0x170> eddf cb01 vldr d28, \[pc, #4\] ; 00000178 <thumb2_ldr\+0x178>
00000174 <thumb2_ldr\+0x174> eddf fb00 vldr d31, \[pc\] ; 00000178 <thumb2_ldr\+0x178>
00000178 <thumb2_ldr\+0x178> 00000000 .word 0x00000000
0000017c <thumb2_ldr\+0x17c> 0fff0000 .word 0x0fff0000
00000180 <thumb2_ldr\+0x180> ef80 0e30 vmov.i64 d0, #0x0000000000000000
00000184 <thumb2_ldr\+0x184> ef80 ee30 vmov.i64 d14, #0x0000000000000000
00000188 <thumb2_ldr\+0x188> efc0 ce30 vmov.i64 d28, #0x0000000000000000
0000018c <thumb2_ldr\+0x18c> efc0 fe30 vmov.i64 d31, #0x0000000000000000
00000190 <thumb2_ldr\+0x190> ed9f 0b0b vldr d0, \[pc, #44\] ; 000001c0 <thumb2_ldr\+0x1c0>
00000194 <thumb2_ldr\+0x194> ed9f eb0a vldr d14, \[pc, #40\] ; 000001c0 <thumb2_ldr\+0x1c0>
00000198 <thumb2_ldr\+0x198> eddf cb09 vldr d28, \[pc, #36\] ; 000001c0 <thumb2_ldr\+0x1c0>
0000019c <thumb2_ldr\+0x19c> eddf fb08 vldr d31, \[pc, #32\] ; 000001c0 <thumb2_ldr\+0x1c0>
000001a0 <thumb2_ldr\+0x1a0> ed9f 0b09 vldr d0, \[pc, #36\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001a4 <thumb2_ldr\+0x1a4> ed9f eb08 vldr d14, \[pc, #32\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001a8 <thumb2_ldr\+0x1a8> eddf cb07 vldr d28, \[pc, #28\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001ac <thumb2_ldr\+0x1ac> eddf fb06 vldr d31, \[pc, #24\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001b0 <thumb2_ldr\+0x1b0> ed9f 0b05 vldr d0, \[pc, #20\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001b4 <thumb2_ldr\+0x1b4> ed9f eb04 vldr d14, \[pc, #16\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001b8 <thumb2_ldr\+0x1b8> eddf cb03 vldr d28, \[pc, #12\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001bc <thumb2_ldr\+0x1bc> eddf fb02 vldr d31, \[pc, #8\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001c0 <thumb2_ldr\+0x1c0> 00000000 .word 0x00000000
000001c4 <thumb2_ldr\+0x1c4> 000ff000 .word 0x000ff000
000001c8 <thumb2_ldr\+0x1c8> f0000000 .word 0xf0000000
000001cc <thumb2_ldr\+0x1cc> 0ff00fff .word 0x0ff00fff
000001d0 <thumb2_ldr\+0x1d0> ed9f 1b01 vldr d1, \[pc, #4\] ; 000001d8 <thumb2_ldr\+0x1d8>
\.\.\.
000001dc <thumb2_ldr\+0x1dc> 0000fff0 .word 0x0000fff0
000001e0 <thumb2_ldr\+0x1e0> f101 0000 add.w r0, r1, #0
000001e4 <thumb2_ldr\+0x1e4> ed9f 1b00 vldr d1, \[pc\] ; 000001e8 <thumb2_ldr\+0x1e8>
000001e8 <thumb2_ldr\+0x1e8> 00000000 .word 0x00000000
000001ec <thumb2_ldr\+0x1ec> 0000fff0 .word 0x0000fff0
000001f0 <thumb2_ldr\+0x1f0> ed9f 1b11 vldr d1, \[pc, #68\] ; 00000238 <thumb2_ldr\+0x238>
000001f4 <thumb2_ldr\+0x1f4> ed9f 1a12 vldr s2, \[pc, #72\] ; 00000240 <thumb2_ldr\+0x240>
000001f8 <thumb2_ldr\+0x1f8> ed9f 3b13 vldr d3, \[pc, #76\] ; 00000248 <thumb2_ldr\+0x248>
000001fc <thumb2_ldr\+0x1fc> ed9f 2a11 vldr s4, \[pc, #68\] ; 00000244 <thumb2_ldr\+0x244>
00000200 <thumb2_ldr\+0x200> ed9f 5b11 vldr d5, \[pc, #68\] ; 00000248 <thumb2_ldr\+0x248>
00000204 <thumb2_ldr\+0x204> ed9f 6b12 vldr d6, \[pc, #72\] ; 00000250 <thumb2_ldr\+0x250>
00000208 <thumb2_ldr\+0x208> ed9f 7b13 vldr d7, \[pc, #76\] ; 00000258 <thumb2_ldr\+0x258>
0000020c <thumb2_ldr\+0x20c> ed9f 4a14 vldr s8, \[pc, #80\] ; 00000260 <thumb2_ldr\+0x260>
00000210 <thumb2_ldr\+0x210> ed9f 9b15 vldr d9, \[pc, #84\] ; 00000268 <thumb2_ldr\+0x268>
00000214 <thumb2_ldr\+0x214> ed9f 5a13 vldr s10, \[pc, #76\] ; 00000264 <thumb2_ldr\+0x264>
00000218 <thumb2_ldr\+0x218> ed9f bb15 vldr d11, \[pc, #84\] ; 00000270 <thumb2_ldr\+0x270>
0000021c <thumb2_ldr\+0x21c> ed9f 6a16 vldr s12, \[pc, #88\] ; 00000278 <thumb2_ldr\+0x278>
00000220 <thumb2_ldr\+0x220> eddf 6a16 vldr s13, \[pc, #88\] ; 0000027c <thumb2_ldr\+0x27c>
00000224 <thumb2_ldr\+0x224> ed9f 7a07 vldr s14, \[pc, #28\] ; 00000244 <thumb2_ldr\+0x244>
00000228 <thumb2_ldr\+0x228> eddf 7a04 vldr s15, \[pc, #16\] ; 0000023c <thumb2_ldr\+0x23c>
0000022c <thumb2_ldr\+0x22c> eddf 0b12 vldr d16, \[pc, #72\] ; 00000278 <thumb2_ldr\+0x278>
00000230 <thumb2_ldr\+0x230> eddf 1b13 vldr d17, \[pc, #76\] ; 00000280 <thumb2_ldr\+0x280>
\.\.\.
0000023c <thumb2_ldr\+0x23c> 0000fff0 .word 0x0000fff0
00000240 <thumb2_ldr\+0x240> ff000000 .word 0xff000000
00000244 <thumb2_ldr\+0x244> ff000001 .word 0xff000001
00000248 <thumb2_ldr\+0x248> 00000001 .word 0x00000001
0000024c <thumb2_ldr\+0x24c> 0000fff0 .word 0x0000fff0
00000250 <thumb2_ldr\+0x250> 00000002 .word 0x00000002
00000254 <thumb2_ldr\+0x254> 0000fff0 .word 0x0000fff0
00000258 <thumb2_ldr\+0x258> 00000003 .word 0x00000003
0000025c <thumb2_ldr\+0x25c> 0000fff0 .word 0x0000fff0
00000260 <thumb2_ldr\+0x260> ff000002 .word 0xff000002
00000264 <thumb2_ldr\+0x264> ff000003 .word 0xff000003
00000268 <thumb2_ldr\+0x268> 00000004 .word 0x00000004
0000026c <thumb2_ldr\+0x26c> 0000fff0 .word 0x0000fff0
00000270 <thumb2_ldr\+0x270> 00000005 .word 0x00000005
00000274 <thumb2_ldr\+0x274> 0000fff0 .word 0x0000fff0
00000278 <thumb2_ldr\+0x278> ff000004 .word 0xff000004
0000027c <thumb2_ldr\+0x27c> ff000005 .word 0xff000005
00000280 <thumb2_ldr\+0x280> 0000fff0 .word 0x0000fff0
00000284 <thumb2_ldr\+0x284> ff000004 .word 0xff000004

View file

@ -0,0 +1,95 @@
.text
.fpu neon
.thumb
.syntax unified
.thumb_func
thumb2_ldr:
.macro vlxr regtype const
.irp regindex, 0, 14, 28, 31
vldr \regtype\regindex, \const
.endr
.endm
# Thumb-2 support vldr literal pool also.
vlxr s "=0"
vlxr s "=0xff000000"
vlxr s "=-1"
vlxr s "=0x0fff0000"
.pool
vlxr s "=0"
vlxr s "=0x00ff0000"
vlxr s "=0xff00ffff"
vlxr s "=0x00fff000"
.pool
vlxr d "=0"
vlxr d "=0xca000000"
vlxr d "=-1"
vlxr d "=0x0fff0000"
.pool
vlxr d "=0"
vlxr d "=0x00ff0000"
vlxr d "=0xff0000ff"
vlxr d "=0x00fff000"
.pool
vlxr d "=0"
vlxr d "=0xff00000000000000"
vlxr d "=-1"
vlxr d "=0x0fff000000000000"
.pool
vlxr d "=0"
vlxr d "=0x00ff00000000000"
vlxr d "=0xff00ffff0000000"
vlxr d "=0xff00ffff0000000"
.pool
# pool should be aligned to 8-byte.
.p2align 3
vldr d1, =0x0000fff000000000
.pool
# no error when code is align already.
.p2align 3
add r0, r1, #0
vldr d1, =0x0000fff000000000
.pool
.p2align 3
vldr d1, =0x0000fff000000000
vldr s2, =0xff000000
# padding A
vldr d3, =0x0000fff000000001
# reuse padding slot A
vldr s4, =0xff000001
# reuse d3
vldr d5, =0x0000fff000000001
# new 8-byte entry
vldr d6, =0x0000fff000000002
# new 8-byte entry
vldr d7, =0x0000fff000000003
# new 4-byte entry
vldr s8, =0xff000002
# padding B
vldr d9, =0x0000fff000000004
# reuse padding slot B
vldr s10, =0xff000003
# new 8-byte entry
vldr d11, =0x0000fff000000005
# new 4 entry
vldr s12, =0xff000004
# new 4 entry
vldr s13, =0xff000005
# reuse value of s4 in pool
vldr s14, =0xff000001
# reuse high part of d1 in pool
vldr s15, =0x0000fff0
# 8-byte entry reuse two 4-byte entries.
# d16 reuse s12, s13
vldr d16, =0xff000005ff000004
# d17 should not reuse high part of d11 and s12.
# because the it's align 8-byte aligned.
vldr d17, =0xff0000040000fff0
.pool

View file

@ -0,0 +1,176 @@
# as: -march=armv6t2 -mbig-endian
# objdump: -dr --prefix-addresses --show-raw-insn
# This test is only valid on ELF based ports.
#not-target: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd *-*-riscix*
#name: Thumb2 vldr with immediate constant
#source: thumb2_vpool.s
.*: +file format .*arm.*
Disassembly of section .text:
00000000 <thumb2_ldr> ed9f 0a0f vldr s0, \[pc, #60\] ; 00000040 <thumb2_ldr\+0x40>
00000004 <thumb2_ldr\+0x4> ed9f 7a0e vldr s14, \[pc, #56\] ; 00000040 <thumb2_ldr\+0x40>
00000008 <thumb2_ldr\+0x8> ed9f ea0d vldr s28, \[pc, #52\] ; 00000040 <thumb2_ldr\+0x40>
0000000c <thumb2_ldr\+0xc> eddf fa0c vldr s31, \[pc, #48\] ; 00000040 <thumb2_ldr\+0x40>
00000010 <thumb2_ldr\+0x10> ed9f 0a0c vldr s0, \[pc, #48\] ; 00000044 <thumb2_ldr\+0x44>
00000014 <thumb2_ldr\+0x14> ed9f 7a0b vldr s14, \[pc, #44\] ; 00000044 <thumb2_ldr\+0x44>
00000018 <thumb2_ldr\+0x18> ed9f ea0a vldr s28, \[pc, #40\] ; 00000044 <thumb2_ldr\+0x44>
0000001c <thumb2_ldr\+0x1c> eddf fa09 vldr s31, \[pc, #36\] ; 00000044 <thumb2_ldr\+0x44>
00000020 <thumb2_ldr\+0x20> ed9f 0a09 vldr s0, \[pc, #36\] ; 00000048 <thumb2_ldr\+0x48>
00000024 <thumb2_ldr\+0x24> ed9f 7a08 vldr s14, \[pc, #32\] ; 00000048 <thumb2_ldr\+0x48>
00000028 <thumb2_ldr\+0x28> ed9f ea07 vldr s28, \[pc, #28\] ; 00000048 <thumb2_ldr\+0x48>
0000002c <thumb2_ldr\+0x2c> eddf fa06 vldr s31, \[pc, #24\] ; 00000048 <thumb2_ldr\+0x48>
00000030 <thumb2_ldr\+0x30> ed9f 0a06 vldr s0, \[pc, #24\] ; 0000004c <thumb2_ldr\+0x4c>
00000034 <thumb2_ldr\+0x34> ed9f 7a05 vldr s14, \[pc, #20\] ; 0000004c <thumb2_ldr\+0x4c>
00000038 <thumb2_ldr\+0x38> ed9f ea04 vldr s28, \[pc, #16\] ; 0000004c <thumb2_ldr\+0x4c>
0000003c <thumb2_ldr\+0x3c> eddf fa03 vldr s31, \[pc, #12\] ; 0000004c <thumb2_ldr\+0x4c>
00000040 <thumb2_ldr\+0x40> 00000000 .word 0x00000000
00000044 <thumb2_ldr\+0x44> ff000000 .word 0xff000000
00000048 <thumb2_ldr\+0x48> ffffffff .word 0xffffffff
0000004c <thumb2_ldr\+0x4c> 0fff0000 .word 0x0fff0000
00000050 <thumb2_ldr\+0x50> ed9f 0a0f vldr s0, \[pc, #60\] ; 00000090 <thumb2_ldr\+0x90>
00000054 <thumb2_ldr\+0x54> ed9f 7a0e vldr s14, \[pc, #56\] ; 00000090 <thumb2_ldr\+0x90>
00000058 <thumb2_ldr\+0x58> ed9f ea0d vldr s28, \[pc, #52\] ; 00000090 <thumb2_ldr\+0x90>
0000005c <thumb2_ldr\+0x5c> eddf fa0c vldr s31, \[pc, #48\] ; 00000090 <thumb2_ldr\+0x90>
00000060 <thumb2_ldr\+0x60> ed9f 0a0c vldr s0, \[pc, #48\] ; 00000094 <thumb2_ldr\+0x94>
00000064 <thumb2_ldr\+0x64> ed9f 7a0b vldr s14, \[pc, #44\] ; 00000094 <thumb2_ldr\+0x94>
00000068 <thumb2_ldr\+0x68> ed9f ea0a vldr s28, \[pc, #40\] ; 00000094 <thumb2_ldr\+0x94>
0000006c <thumb2_ldr\+0x6c> eddf fa09 vldr s31, \[pc, #36\] ; 00000094 <thumb2_ldr\+0x94>
00000070 <thumb2_ldr\+0x70> ed9f 0a09 vldr s0, \[pc, #36\] ; 00000098 <thumb2_ldr\+0x98>
00000074 <thumb2_ldr\+0x74> ed9f 7a08 vldr s14, \[pc, #32\] ; 00000098 <thumb2_ldr\+0x98>
00000078 <thumb2_ldr\+0x78> ed9f ea07 vldr s28, \[pc, #28\] ; 00000098 <thumb2_ldr\+0x98>
0000007c <thumb2_ldr\+0x7c> eddf fa06 vldr s31, \[pc, #24\] ; 00000098 <thumb2_ldr\+0x98>
00000080 <thumb2_ldr\+0x80> ed9f 0a06 vldr s0, \[pc, #24\] ; 0000009c <thumb2_ldr\+0x9c>
00000084 <thumb2_ldr\+0x84> ed9f 7a05 vldr s14, \[pc, #20\] ; 0000009c <thumb2_ldr\+0x9c>
00000088 <thumb2_ldr\+0x88> ed9f ea04 vldr s28, \[pc, #16\] ; 0000009c <thumb2_ldr\+0x9c>
0000008c <thumb2_ldr\+0x8c> eddf fa03 vldr s31, \[pc, #12\] ; 0000009c <thumb2_ldr\+0x9c>
00000090 <thumb2_ldr\+0x90> 00000000 .word 0x00000000
00000094 <thumb2_ldr\+0x94> 00ff0000 .word 0x00ff0000
00000098 <thumb2_ldr\+0x98> ff00ffff .word 0xff00ffff
0000009c <thumb2_ldr\+0x9c> 00fff000 .word 0x00fff000
000000a0 <thumb2_ldr\+0xa0> ef80 0e30 vmov.i64 d0, #0x0000000000000000
000000a4 <thumb2_ldr\+0xa4> ef80 ee30 vmov.i64 d14, #0x0000000000000000
000000a8 <thumb2_ldr\+0xa8> efc0 ce30 vmov.i64 d28, #0x0000000000000000
000000ac <thumb2_ldr\+0xac> efc0 fe30 vmov.i64 d31, #0x0000000000000000
000000b0 <thumb2_ldr\+0xb0> ed9f 0b0b vldr d0, \[pc, #44\] ; 000000e0 <thumb2_ldr\+0xe0>
000000b4 <thumb2_ldr\+0xb4> ed9f eb0a vldr d14, \[pc, #40\] ; 000000e0 <thumb2_ldr\+0xe0>
000000b8 <thumb2_ldr\+0xb8> eddf cb09 vldr d28, \[pc, #36\] ; 000000e0 <thumb2_ldr\+0xe0>
000000bc <thumb2_ldr\+0xbc> eddf fb08 vldr d31, \[pc, #32\] ; 000000e0 <thumb2_ldr\+0xe0>
000000c0 <thumb2_ldr\+0xc0> ff87 0e3f vmov.i64 d0, #0xffffffffffffffff
000000c4 <thumb2_ldr\+0xc4> ff87 ee3f vmov.i64 d14, #0xffffffffffffffff
000000c8 <thumb2_ldr\+0xc8> ffc7 ce3f vmov.i64 d28, #0xffffffffffffffff
000000cc <thumb2_ldr\+0xcc> ffc7 fe3f vmov.i64 d31, #0xffffffffffffffff
000000d0 <thumb2_ldr\+0xd0> ed9f 0b05 vldr d0, \[pc, #20\] ; 000000e8 <thumb2_ldr\+0xe8>
000000d4 <thumb2_ldr\+0xd4> ed9f eb04 vldr d14, \[pc, #16\] ; 000000e8 <thumb2_ldr\+0xe8>
000000d8 <thumb2_ldr\+0xd8> eddf cb03 vldr d28, \[pc, #12\] ; 000000e8 <thumb2_ldr\+0xe8>
000000dc <thumb2_ldr\+0xdc> eddf fb02 vldr d31, \[pc, #8\] ; 000000e8 <thumb2_ldr\+0xe8>
000000e0 <thumb2_ldr\+0xe0> 00000000 .word 0x00000000
000000e4 <thumb2_ldr\+0xe4> ca000000 .word 0xca000000
000000e8 <thumb2_ldr\+0xe8> 00000000 .word 0x00000000
000000ec <thumb2_ldr\+0xec> 0fff0000 .word 0x0fff0000
000000f0 <thumb2_ldr\+0xf0> ef80 0e30 vmov.i64 d0, #0x0000000000000000
000000f4 <thumb2_ldr\+0xf4> ef80 ee30 vmov.i64 d14, #0x0000000000000000
000000f8 <thumb2_ldr\+0xf8> efc0 ce30 vmov.i64 d28, #0x0000000000000000
000000fc <thumb2_ldr\+0xfc> efc0 fe30 vmov.i64 d31, #0x0000000000000000
00000100 <thumb2_ldr\+0x100> ef80 0e34 vmov.i64 d0, #0x0000000000ff0000
00000104 <thumb2_ldr\+0x104> ef80 ee34 vmov.i64 d14, #0x0000000000ff0000
00000108 <thumb2_ldr\+0x108> efc0 ce34 vmov.i64 d28, #0x0000000000ff0000
0000010c <thumb2_ldr\+0x10c> efc0 fe34 vmov.i64 d31, #0x0000000000ff0000
00000110 <thumb2_ldr\+0x110> ef80 0e39 vmov.i64 d0, #0x00000000ff0000ff
00000114 <thumb2_ldr\+0x114> ef80 ee39 vmov.i64 d14, #0x00000000ff0000ff
00000118 <thumb2_ldr\+0x118> efc0 ce39 vmov.i64 d28, #0x00000000ff0000ff
0000011c <thumb2_ldr\+0x11c> efc0 fe39 vmov.i64 d31, #0x00000000ff0000ff
00000120 <thumb2_ldr\+0x120> ed9f 0b03 vldr d0, \[pc, #12\] ; 00000130 <thumb2_ldr\+0x130>
00000124 <thumb2_ldr\+0x124> ed9f eb02 vldr d14, \[pc, #8\] ; 00000130 <thumb2_ldr\+0x130>
00000128 <thumb2_ldr\+0x128> eddf cb01 vldr d28, \[pc, #4\] ; 00000130 <thumb2_ldr\+0x130>
0000012c <thumb2_ldr\+0x12c> eddf fb00 vldr d31, \[pc\] ; 00000130 <thumb2_ldr\+0x130>
00000130 <thumb2_ldr\+0x130> 00000000 .word 0x00000000
00000134 <thumb2_ldr\+0x134> 00fff000 .word 0x00fff000
00000138 <thumb2_ldr\+0x138> ef80 0e30 vmov.i64 d0, #0x0000000000000000
0000013c <thumb2_ldr\+0x13c> ef80 ee30 vmov.i64 d14, #0x0000000000000000
00000140 <thumb2_ldr\+0x140> efc0 ce30 vmov.i64 d28, #0x0000000000000000
00000144 <thumb2_ldr\+0x144> efc0 fe30 vmov.i64 d31, #0x0000000000000000
00000148 <thumb2_ldr\+0x148> ff80 0e30 vmov.i64 d0, #0xff00000000000000
0000014c <thumb2_ldr\+0x14c> ff80 ee30 vmov.i64 d14, #0xff00000000000000
00000150 <thumb2_ldr\+0x150> ffc0 ce30 vmov.i64 d28, #0xff00000000000000
00000154 <thumb2_ldr\+0x154> ffc0 fe30 vmov.i64 d31, #0xff00000000000000
00000158 <thumb2_ldr\+0x158> ff87 0e3f vmov.i64 d0, #0xffffffffffffffff
0000015c <thumb2_ldr\+0x15c> ff87 ee3f vmov.i64 d14, #0xffffffffffffffff
00000160 <thumb2_ldr\+0x160> ffc7 ce3f vmov.i64 d28, #0xffffffffffffffff
00000164 <thumb2_ldr\+0x164> ffc7 fe3f vmov.i64 d31, #0xffffffffffffffff
00000168 <thumb2_ldr\+0x168> ed9f 0b03 vldr d0, \[pc, #12\] ; 00000178 <thumb2_ldr\+0x178>
0000016c <thumb2_ldr\+0x16c> ed9f eb02 vldr d14, \[pc, #8\] ; 00000178 <thumb2_ldr\+0x178>
00000170 <thumb2_ldr\+0x170> eddf cb01 vldr d28, \[pc, #4\] ; 00000178 <thumb2_ldr\+0x178>
00000174 <thumb2_ldr\+0x174> eddf fb00 vldr d31, \[pc\] ; 00000178 <thumb2_ldr\+0x178>
00000178 <thumb2_ldr\+0x178> 0fff0000 .word 0x0fff0000
0000017c <thumb2_ldr\+0x17c> 00000000 .word 0x00000000
00000180 <thumb2_ldr\+0x180> ef80 0e30 vmov.i64 d0, #0x0000000000000000
00000184 <thumb2_ldr\+0x184> ef80 ee30 vmov.i64 d14, #0x0000000000000000
00000188 <thumb2_ldr\+0x188> efc0 ce30 vmov.i64 d28, #0x0000000000000000
0000018c <thumb2_ldr\+0x18c> efc0 fe30 vmov.i64 d31, #0x0000000000000000
00000190 <thumb2_ldr\+0x190> ed9f 0b0b vldr d0, \[pc, #44\] ; 000001c0 <thumb2_ldr\+0x1c0>
00000194 <thumb2_ldr\+0x194> ed9f eb0a vldr d14, \[pc, #40\] ; 000001c0 <thumb2_ldr\+0x1c0>
00000198 <thumb2_ldr\+0x198> eddf cb09 vldr d28, \[pc, #36\] ; 000001c0 <thumb2_ldr\+0x1c0>
0000019c <thumb2_ldr\+0x19c> eddf fb08 vldr d31, \[pc, #32\] ; 000001c0 <thumb2_ldr\+0x1c0>
000001a0 <thumb2_ldr\+0x1a0> ed9f 0b09 vldr d0, \[pc, #36\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001a4 <thumb2_ldr\+0x1a4> ed9f eb08 vldr d14, \[pc, #32\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001a8 <thumb2_ldr\+0x1a8> eddf cb07 vldr d28, \[pc, #28\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001ac <thumb2_ldr\+0x1ac> eddf fb06 vldr d31, \[pc, #24\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001b0 <thumb2_ldr\+0x1b0> ed9f 0b05 vldr d0, \[pc, #20\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001b4 <thumb2_ldr\+0x1b4> ed9f eb04 vldr d14, \[pc, #16\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001b8 <thumb2_ldr\+0x1b8> eddf cb03 vldr d28, \[pc, #12\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001bc <thumb2_ldr\+0x1bc> eddf fb02 vldr d31, \[pc, #8\] ; 000001c8 <thumb2_ldr\+0x1c8>
000001c0 <thumb2_ldr\+0x1c0> 000ff000 .word 0x000ff000
000001c4 <thumb2_ldr\+0x1c4> 00000000 .word 0x00000000
000001c8 <thumb2_ldr\+0x1c8> 0ff00fff .word 0x0ff00fff
000001cc <thumb2_ldr\+0x1cc> f0000000 .word 0xf0000000
000001d0 <thumb2_ldr\+0x1d0> ed9f 1b01 vldr d1, \[pc, #4\] ; 000001d8 <thumb2_ldr\+0x1d8>
000001d4 <thumb2_ldr\+0x1d4> 0000 movs r0, r0
000001d6 <thumb2_ldr\+0x1d6> 0000 movs r0, r0
000001d8 <thumb2_ldr\+0x1d8> 0000fff0 .word 0x0000fff0
000001dc <thumb2_ldr\+0x1dc> 00000000 .word 0x00000000
000001e0 <thumb2_ldr\+0x1e0> f101 0000 add.w r0, r1, #0
000001e4 <thumb2_ldr\+0x1e4> ed9f 1b00 vldr d1, \[pc\] ; 000001e8 <thumb2_ldr\+0x1e8>
000001e8 <thumb2_ldr\+0x1e8> 0000fff0 .word 0x0000fff0
000001ec <thumb2_ldr\+0x1ec> 00000000 .word 0x00000000
000001f0 <thumb2_ldr\+0x1f0> ed9f 1b11 vldr d1, \[pc, #68\] ; 00000238 <thumb2_ldr\+0x238>
000001f4 <thumb2_ldr\+0x1f4> ed9f 1a12 vldr s2, \[pc, #72\] ; 00000240 <thumb2_ldr\+0x240>
000001f8 <thumb2_ldr\+0x1f8> ed9f 3b13 vldr d3, \[pc, #76\] ; 00000248 <thumb2_ldr\+0x248>
000001fc <thumb2_ldr\+0x1fc> ed9f 2a11 vldr s4, \[pc, #68\] ; 00000244 <thumb2_ldr\+0x244>
00000200 <thumb2_ldr\+0x200> ed9f 5b11 vldr d5, \[pc, #68\] ; 00000248 <thumb2_ldr\+0x248>
00000204 <thumb2_ldr\+0x204> ed9f 6b12 vldr d6, \[pc, #72\] ; 00000250 <thumb2_ldr\+0x250>
00000208 <thumb2_ldr\+0x208> ed9f 7b13 vldr d7, \[pc, #76\] ; 00000258 <thumb2_ldr\+0x258>
0000020c <thumb2_ldr\+0x20c> ed9f 4a14 vldr s8, \[pc, #80\] ; 00000260 <thumb2_ldr\+0x260>
00000210 <thumb2_ldr\+0x210> ed9f 9b15 vldr d9, \[pc, #84\] ; 00000268 <thumb2_ldr\+0x268>
00000214 <thumb2_ldr\+0x214> ed9f 5a13 vldr s10, \[pc, #76\] ; 00000264 <thumb2_ldr\+0x264>
00000218 <thumb2_ldr\+0x218> ed9f bb15 vldr d11, \[pc, #84\] ; 00000270 <thumb2_ldr\+0x270>
0000021c <thumb2_ldr\+0x21c> ed9f 6a16 vldr s12, \[pc, #88\] ; 00000278 <thumb2_ldr\+0x278>
00000220 <thumb2_ldr\+0x220> eddf 6a16 vldr s13, \[pc, #88\] ; 0000027c <thumb2_ldr\+0x27c>
00000224 <thumb2_ldr\+0x224> ed9f 7a07 vldr s14, \[pc, #28\] ; 00000244 <thumb2_ldr\+0x244>
00000228 <thumb2_ldr\+0x228> eddf 7a03 vldr s15, \[pc, #12\] ; 00000238 <thumb2_ldr\+0x238>
0000022c <thumb2_ldr\+0x22c> eddf 0b14 vldr d16, \[pc, #80\] ; 00000280 <thumb2_ldr\+0x280>
00000230 <thumb2_ldr\+0x230> eddf 1b15 vldr d17, \[pc, #84\] ; 00000288 <thumb2_ldr\+0x288>
00000234 <thumb2_ldr\+0x234> 0000 movs r0, r0
00000236 <thumb2_ldr\+0x236> 0000 movs r0, r0
00000238 <thumb2_ldr\+0x238> 0000fff0 .word 0x0000fff0
0000023c <thumb2_ldr\+0x23c> 00000000 .word 0x00000000
00000240 <thumb2_ldr\+0x240> ff000000 .word 0xff000000
00000244 <thumb2_ldr\+0x244> ff000001 .word 0xff000001
00000248 <thumb2_ldr\+0x248> 0000fff0 .word 0x0000fff0
0000024c <thumb2_ldr\+0x24c> 00000001 .word 0x00000001
00000250 <thumb2_ldr\+0x250> 0000fff0 .word 0x0000fff0
00000254 <thumb2_ldr\+0x254> 00000002 .word 0x00000002
00000258 <thumb2_ldr\+0x258> 0000fff0 .word 0x0000fff0
0000025c <thumb2_ldr\+0x25c> 00000003 .word 0x00000003
00000260 <thumb2_ldr\+0x260> ff000002 .word 0xff000002
00000264 <thumb2_ldr\+0x264> ff000003 .word 0xff000003
00000268 <thumb2_ldr\+0x268> 0000fff0 .word 0x0000fff0
0000026c <thumb2_ldr\+0x26c> 00000004 .word 0x00000004
00000270 <thumb2_ldr\+0x270> 0000fff0 .word 0x0000fff0
00000274 <thumb2_ldr\+0x274> 00000005 .word 0x00000005
00000278 <thumb2_ldr\+0x278> ff000004 .word 0xff000004
0000027c <thumb2_ldr\+0x27c> ff000005 .word 0xff000005
00000280 <thumb2_ldr\+0x280> ff000005 .word 0xff000005
00000284 <thumb2_ldr\+0x284> ff000004 .word 0xff000004
00000288 <thumb2_ldr\+0x288> ff000004 .word 0xff000004
0000028c <thumb2_ldr\+0x28c> 0000fff0 .word 0x0000fff0

View file

@ -0,0 +1,280 @@
#objdump: -dr --prefix-addresses --show-raw-insn
#name: ARM vldr with immediate constant
#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
#as: -mcpu=arm7m -EL
.*: +file format .*arm.*
Disassembly of section .text:
00000000 <foo> ed9f0a0e vldr s0, \[pc, #56\] ; 00000040 <foo\+0x40>
00000004 <foo\+0x4> ed9f7a0d vldr s14, \[pc, #52\] ; 00000040 <foo\+0x40>
00000008 <foo\+0x8> ed9fea0c vldr s28, \[pc, #48\] ; 00000040 <foo\+0x40>
0000000c <foo\+0xc> eddffa0b vldr s31, \[pc, #44\] ; 00000040 <foo\+0x40>
00000010 <foo\+0x10> ed9f0a0b vldr s0, \[pc, #44\] ; 00000044 <foo\+0x44>
00000014 <foo\+0x14> ed9f7a0a vldr s14, \[pc, #40\] ; 00000044 <foo\+0x44>
00000018 <foo\+0x18> ed9fea09 vldr s28, \[pc, #36\] ; 00000044 <foo\+0x44>
0000001c <foo\+0x1c> eddffa08 vldr s31, \[pc, #32\] ; 00000044 <foo\+0x44>
00000020 <foo\+0x20> ed9f0a08 vldr s0, \[pc, #32\] ; 00000048 <foo\+0x48>
00000024 <foo\+0x24> ed9f7a07 vldr s14, \[pc, #28\] ; 00000048 <foo\+0x48>
00000028 <foo\+0x28> ed9fea06 vldr s28, \[pc, #24\] ; 00000048 <foo\+0x48>
0000002c <foo\+0x2c> eddffa05 vldr s31, \[pc, #20\] ; 00000048 <foo\+0x48>
00000030 <foo\+0x30> ed9f0a05 vldr s0, \[pc, #20\] ; 0000004c <foo\+0x4c>
00000034 <foo\+0x34> ed9f7a04 vldr s14, \[pc, #16\] ; 0000004c <foo\+0x4c>
00000038 <foo\+0x38> ed9fea03 vldr s28, \[pc, #12\] ; 0000004c <foo\+0x4c>
0000003c <foo\+0x3c> eddffa02 vldr s31, \[pc, #8\] ; 0000004c <foo\+0x4c>
00000040 <foo\+0x40> 00000000 .word 0x00000000
00000044 <foo\+0x44> ff000000 .word 0xff000000
00000048 <foo\+0x48> ffffffff .word 0xffffffff
0000004c <foo\+0x4c> 0fff0000 .word 0x0fff0000
00000050 <foo\+0x50> ed9f0a0e vldr s0, \[pc, #56\] ; 00000090 <foo\+0x90>
00000054 <foo\+0x54> ed9f7a0d vldr s14, \[pc, #52\] ; 00000090 <foo\+0x90>
00000058 <foo\+0x58> ed9fea0c vldr s28, \[pc, #48\] ; 00000090 <foo\+0x90>
0000005c <foo\+0x5c> eddffa0b vldr s31, \[pc, #44\] ; 00000090 <foo\+0x90>
00000060 <foo\+0x60> ed9f0a0b vldr s0, \[pc, #44\] ; 00000094 <foo\+0x94>
00000064 <foo\+0x64> ed9f7a0a vldr s14, \[pc, #40\] ; 00000094 <foo\+0x94>
00000068 <foo\+0x68> ed9fea09 vldr s28, \[pc, #36\] ; 00000094 <foo\+0x94>
0000006c <foo\+0x6c> eddffa08 vldr s31, \[pc, #32\] ; 00000094 <foo\+0x94>
00000070 <foo\+0x70> ed9f0a08 vldr s0, \[pc, #32\] ; 00000098 <foo\+0x98>
00000074 <foo\+0x74> ed9f7a07 vldr s14, \[pc, #28\] ; 00000098 <foo\+0x98>
00000078 <foo\+0x78> ed9fea06 vldr s28, \[pc, #24\] ; 00000098 <foo\+0x98>
0000007c <foo\+0x7c> eddffa05 vldr s31, \[pc, #20\] ; 00000098 <foo\+0x98>
00000080 <foo\+0x80> ed9f0a05 vldr s0, \[pc, #20\] ; 0000009c <foo\+0x9c>
00000084 <foo\+0x84> ed9f7a04 vldr s14, \[pc, #16\] ; 0000009c <foo\+0x9c>
00000088 <foo\+0x88> ed9fea03 vldr s28, \[pc, #12\] ; 0000009c <foo\+0x9c>
0000008c <foo\+0x8c> eddffa02 vldr s31, \[pc, #8\] ; 0000009c <foo\+0x9c>
00000090 <foo\+0x90> 00000000 .word 0x00000000
00000094 <foo\+0x94> 00ff0000 .word 0x00ff0000
00000098 <foo\+0x98> ff00ffff .word 0xff00ffff
0000009c <foo\+0x9c> 00fff000 .word 0x00fff000
000000a0 <foo\+0xa0> 0d9f0a0e vldreq s0, \[pc, #56\] ; 000000e0 <foo\+0xe0>
000000a4 <foo\+0xa4> 0d9f7a0d vldreq s14, \[pc, #52\] ; 000000e0 <foo\+0xe0>
000000a8 <foo\+0xa8> 0d9fea0c vldreq s28, \[pc, #48\] ; 000000e0 <foo\+0xe0>
000000ac <foo\+0xac> 0ddffa0b vldreq s31, \[pc, #44\] ; 000000e0 <foo\+0xe0>
000000b0 <foo\+0xb0> 0d9f0a0b vldreq s0, \[pc, #44\] ; 000000e4 <foo\+0xe4>
000000b4 <foo\+0xb4> 0d9f7a0a vldreq s14, \[pc, #40\] ; 000000e4 <foo\+0xe4>
000000b8 <foo\+0xb8> 0d9fea09 vldreq s28, \[pc, #36\] ; 000000e4 <foo\+0xe4>
000000bc <foo\+0xbc> 0ddffa08 vldreq s31, \[pc, #32\] ; 000000e4 <foo\+0xe4>
000000c0 <foo\+0xc0> 0d9f0a08 vldreq s0, \[pc, #32\] ; 000000e8 <foo\+0xe8>
000000c4 <foo\+0xc4> 0d9f7a07 vldreq s14, \[pc, #28\] ; 000000e8 <foo\+0xe8>
000000c8 <foo\+0xc8> 0d9fea06 vldreq s28, \[pc, #24\] ; 000000e8 <foo\+0xe8>
000000cc <foo\+0xcc> 0ddffa05 vldreq s31, \[pc, #20\] ; 000000e8 <foo\+0xe8>
000000d0 <foo\+0xd0> 0d9f0a05 vldreq s0, \[pc, #20\] ; 000000ec <foo\+0xec>
000000d4 <foo\+0xd4> 0d9f7a04 vldreq s14, \[pc, #16\] ; 000000ec <foo\+0xec>
000000d8 <foo\+0xd8> 0d9fea03 vldreq s28, \[pc, #12\] ; 000000ec <foo\+0xec>
000000dc <foo\+0xdc> 0ddffa02 vldreq s31, \[pc, #8\] ; 000000ec <foo\+0xec>
000000e0 <foo\+0xe0> 00000000 .word 0x00000000
000000e4 <foo\+0xe4> 0000ff00 .word 0x0000ff00
000000e8 <foo\+0xe8> ffff00ff .word 0xffff00ff
000000ec <foo\+0xec> 000fff00 .word 0x000fff00
000000f0 <foo\+0xf0> 4d9f0a0e vldrmi s0, \[pc, #56\] ; 00000130 <foo\+0x130>
000000f4 <foo\+0xf4> 4d9f7a0d vldrmi s14, \[pc, #52\] ; 00000130 <foo\+0x130>
000000f8 <foo\+0xf8> 4d9fea0c vldrmi s28, \[pc, #48\] ; 00000130 <foo\+0x130>
000000fc <foo\+0xfc> 4ddffa0b vldrmi s31, \[pc, #44\] ; 00000130 <foo\+0x130>
00000100 <foo\+0x100> 4d9f0a0b vldrmi s0, \[pc, #44\] ; 00000134 <foo\+0x134>
00000104 <foo\+0x104> 4d9f7a0a vldrmi s14, \[pc, #40\] ; 00000134 <foo\+0x134>
00000108 <foo\+0x108> 4d9fea09 vldrmi s28, \[pc, #36\] ; 00000134 <foo\+0x134>
0000010c <foo\+0x10c> 4ddffa08 vldrmi s31, \[pc, #32\] ; 00000134 <foo\+0x134>
00000110 <foo\+0x110> 4d9f0a08 vldrmi s0, \[pc, #32\] ; 00000138 <foo\+0x138>
00000114 <foo\+0x114> 4d9f7a07 vldrmi s14, \[pc, #28\] ; 00000138 <foo\+0x138>
00000118 <foo\+0x118> 4d9fea06 vldrmi s28, \[pc, #24\] ; 00000138 <foo\+0x138>
0000011c <foo\+0x11c> 4ddffa05 vldrmi s31, \[pc, #20\] ; 00000138 <foo\+0x138>
00000120 <foo\+0x120> 4d9f0a05 vldrmi s0, \[pc, #20\] ; 0000013c <foo\+0x13c>
00000124 <foo\+0x124> 4d9f7a04 vldrmi s14, \[pc, #16\] ; 0000013c <foo\+0x13c>
00000128 <foo\+0x128> 4d9fea03 vldrmi s28, \[pc, #12\] ; 0000013c <foo\+0x13c>
0000012c <foo\+0x12c> 4ddffa02 vldrmi s31, \[pc, #8\] ; 0000013c <foo\+0x13c>
00000130 <foo\+0x130> 00000000 .word 0x00000000
00000134 <foo\+0x134> 000000ff .word 0x000000ff
00000138 <foo\+0x138> ffffff00 .word 0xffffff00
0000013c <foo\+0x13c> 0000fff0 .word 0x0000fff0
00000140 <foo\+0x140> f2800e30 vmov.i64 d0, #0x0000000000000000
00000144 <foo\+0x144> f280ee30 vmov.i64 d14, #0x0000000000000000
00000148 <foo\+0x148> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000014c <foo\+0x14c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000150 <foo\+0x150> ed9f0b0a vldr d0, \[pc, #40\] ; 00000180 <foo\+0x180>
00000154 <foo\+0x154> ed9feb09 vldr d14, \[pc, #36\] ; 00000180 <foo\+0x180>
00000158 <foo\+0x158> eddfcb08 vldr d28, \[pc, #32\] ; 00000180 <foo\+0x180>
0000015c <foo\+0x15c> eddffb07 vldr d31, \[pc, #28\] ; 00000180 <foo\+0x180>
00000160 <foo\+0x160> f3870e3f vmov.i64 d0, #0xffffffffffffffff
00000164 <foo\+0x164> f387ee3f vmov.i64 d14, #0xffffffffffffffff
00000168 <foo\+0x168> f3c7ce3f vmov.i64 d28, #0xffffffffffffffff
0000016c <foo\+0x16c> f3c7fe3f vmov.i64 d31, #0xffffffffffffffff
00000170 <foo\+0x170> ed9f0b04 vldr d0, \[pc, #16\] ; 00000188 <foo\+0x188>
00000174 <foo\+0x174> ed9feb03 vldr d14, \[pc, #12\] ; 00000188 <foo\+0x188>
00000178 <foo\+0x178> eddfcb02 vldr d28, \[pc, #8\] ; 00000188 <foo\+0x188>
0000017c <foo\+0x17c> eddffb01 vldr d31, \[pc, #4\] ; 00000188 <foo\+0x188>
00000180 <foo\+0x180> ca000000 .word 0xca000000
00000184 <foo\+0x184> 00000000 .word 0x00000000
00000188 <foo\+0x188> 0fff0000 .word 0x0fff0000
0000018c <foo\+0x18c> 00000000 .word 0x00000000
00000190 <foo\+0x190> f2800e30 vmov.i64 d0, #0x0000000000000000
00000194 <foo\+0x194> f280ee30 vmov.i64 d14, #0x0000000000000000
00000198 <foo\+0x198> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000019c <foo\+0x19c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
000001a0 <foo\+0x1a0> f2800e34 vmov.i64 d0, #0x0000000000ff0000
000001a4 <foo\+0x1a4> f280ee34 vmov.i64 d14, #0x0000000000ff0000
000001a8 <foo\+0x1a8> f2c0ce34 vmov.i64 d28, #0x0000000000ff0000
000001ac <foo\+0x1ac> f2c0fe34 vmov.i64 d31, #0x0000000000ff0000
000001b0 <foo\+0x1b0> f2800e39 vmov.i64 d0, #0x00000000ff0000ff
000001b4 <foo\+0x1b4> f280ee39 vmov.i64 d14, #0x00000000ff0000ff
000001b8 <foo\+0x1b8> f2c0ce39 vmov.i64 d28, #0x00000000ff0000ff
000001bc <foo\+0x1bc> f2c0fe39 vmov.i64 d31, #0x00000000ff0000ff
000001c0 <foo\+0x1c0> ed9f0b02 vldr d0, \[pc, #8\] ; 000001d0 <foo\+0x1d0>
000001c4 <foo\+0x1c4> ed9feb01 vldr d14, \[pc, #4\] ; 000001d0 <foo\+0x1d0>
000001c8 <foo\+0x1c8> eddfcb00 vldr d28, \[pc\] ; 000001d0 <foo\+0x1d0>
000001cc <foo\+0x1cc> ed5ffb01 vldr d31, \[pc, #-4\] ; 000001d0 <foo\+0x1d0>
000001d0 <foo\+0x1d0> 00fff000 .word 0x00fff000
000001d4 <foo\+0x1d4> 00000000 .word 0x00000000
000001d8 <foo\+0x1d8> f2800e30 vmov.i64 d0, #0x0000000000000000
000001dc <foo\+0x1dc> f280ee30 vmov.i64 d14, #0x0000000000000000
000001e0 <foo\+0x1e0> f2c0ce30 vmov.i64 d28, #0x0000000000000000
000001e4 <foo\+0x1e4> f2c0fe30 vmov.i64 d31, #0x0000000000000000
000001e8 <foo\+0x1e8> f2800e32 vmov.i64 d0, #0x000000000000ff00
000001ec <foo\+0x1ec> f280ee32 vmov.i64 d14, #0x000000000000ff00
000001f0 <foo\+0x1f0> f2c0ce32 vmov.i64 d28, #0x000000000000ff00
000001f4 <foo\+0x1f4> f2c0fe32 vmov.i64 d31, #0x000000000000ff00
000001f8 <foo\+0x1f8> f2800e3d vmov.i64 d0, #0x00000000ffff00ff
000001fc <foo\+0x1fc> f280ee3d vmov.i64 d14, #0x00000000ffff00ff
00000200 <foo\+0x200> f2c0ce3d vmov.i64 d28, #0x00000000ffff00ff
00000204 <foo\+0x204> f2c0fe3d vmov.i64 d31, #0x00000000ffff00ff
00000208 <foo\+0x208> 0d9f0b02 vldreq d0, \[pc, #8\] ; 00000218 <foo\+0x218>
0000020c <foo\+0x20c> 0d9feb01 vldreq d14, \[pc, #4\] ; 00000218 <foo\+0x218>
00000210 <foo\+0x210> 0ddfcb00 vldreq d28, \[pc\] ; 00000218 <foo\+0x218>
00000214 <foo\+0x214> 0d5ffb01 vldreq d31, \[pc, #-4\] ; 00000218 <foo\+0x218>
00000218 <foo\+0x218> 000fff00 .word 0x000fff00
0000021c <foo\+0x21c> 00000000 .word 0x00000000
00000220 <foo\+0x220> f2800e30 vmov.i64 d0, #0x0000000000000000
00000224 <foo\+0x224> f280ee30 vmov.i64 d14, #0x0000000000000000
00000228 <foo\+0x228> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000022c <foo\+0x22c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000230 <foo\+0x230> f2800e31 vmov.i64 d0, #0x00000000000000ff
00000234 <foo\+0x234> f280ee31 vmov.i64 d14, #0x00000000000000ff
00000238 <foo\+0x238> f2c0ce31 vmov.i64 d28, #0x00000000000000ff
0000023c <foo\+0x23c> f2c0fe31 vmov.i64 d31, #0x00000000000000ff
00000240 <foo\+0x240> f2800e3e vmov.i64 d0, #0x00000000ffffff00
00000244 <foo\+0x244> f280ee3e vmov.i64 d14, #0x00000000ffffff00
00000248 <foo\+0x248> f2c0ce3e vmov.i64 d28, #0x00000000ffffff00
0000024c <foo\+0x24c> f2c0fe3e vmov.i64 d31, #0x00000000ffffff00
00000250 <foo\+0x250> f2800e33 vmov.i64 d0, #0x000000000000ffff
00000254 <foo\+0x254> f280ee33 vmov.i64 d14, #0x000000000000ffff
00000258 <foo\+0x258> f2c0ce33 vmov.i64 d28, #0x000000000000ffff
0000025c <foo\+0x25c> f2c0fe33 vmov.i64 d31, #0x000000000000ffff
00000260 <foo\+0x260> f2800e30 vmov.i64 d0, #0x0000000000000000
00000264 <foo\+0x264> f280ee30 vmov.i64 d14, #0x0000000000000000
00000268 <foo\+0x268> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000026c <foo\+0x26c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000270 <foo\+0x270> f3800e30 vmov.i64 d0, #0xff00000000000000
00000274 <foo\+0x274> f380ee30 vmov.i64 d14, #0xff00000000000000
00000278 <foo\+0x278> f3c0ce30 vmov.i64 d28, #0xff00000000000000
0000027c <foo\+0x27c> f3c0fe30 vmov.i64 d31, #0xff00000000000000
00000280 <foo\+0x280> f3870e3f vmov.i64 d0, #0xffffffffffffffff
00000284 <foo\+0x284> f387ee3f vmov.i64 d14, #0xffffffffffffffff
00000288 <foo\+0x288> f3c7ce3f vmov.i64 d28, #0xffffffffffffffff
0000028c <foo\+0x28c> f3c7fe3f vmov.i64 d31, #0xffffffffffffffff
00000290 <foo\+0x290> ed9f0b02 vldr d0, \[pc, #8\] ; 000002a0 <foo\+0x2a0>
00000294 <foo\+0x294> ed9feb01 vldr d14, \[pc, #4\] ; 000002a0 <foo\+0x2a0>
00000298 <foo\+0x298> eddfcb00 vldr d28, \[pc\] ; 000002a0 <foo\+0x2a0>
0000029c <foo\+0x29c> ed5ffb01 vldr d31, \[pc, #-4\] ; 000002a0 <foo\+0x2a0>
000002a0 <foo\+0x2a0> 00000000 .word 0x00000000
000002a4 <foo\+0x2a4> 0fff0000 .word 0x0fff0000
000002a8 <foo\+0x2a8> f2800e30 vmov.i64 d0, #0x0000000000000000
000002ac <foo\+0x2ac> f280ee30 vmov.i64 d14, #0x0000000000000000
000002b0 <foo\+0x2b0> f2c0ce30 vmov.i64 d28, #0x0000000000000000
000002b4 <foo\+0x2b4> f2c0fe30 vmov.i64 d31, #0x0000000000000000
000002b8 <foo\+0x2b8> ed9f0b0a vldr d0, \[pc, #40\] ; 000002e8 <foo\+0x2e8>
000002bc <foo\+0x2bc> ed9feb09 vldr d14, \[pc, #36\] ; 000002e8 <foo\+0x2e8>
000002c0 <foo\+0x2c0> eddfcb08 vldr d28, \[pc, #32\] ; 000002e8 <foo\+0x2e8>
000002c4 <foo\+0x2c4> eddffb07 vldr d31, \[pc, #28\] ; 000002e8 <foo\+0x2e8>
000002c8 <foo\+0x2c8> ed9f0b08 vldr d0, \[pc, #32\] ; 000002f0 <foo\+0x2f0>
000002cc <foo\+0x2cc> ed9feb07 vldr d14, \[pc, #28\] ; 000002f0 <foo\+0x2f0>
000002d0 <foo\+0x2d0> eddfcb06 vldr d28, \[pc, #24\] ; 000002f0 <foo\+0x2f0>
000002d4 <foo\+0x2d4> eddffb05 vldr d31, \[pc, #20\] ; 000002f0 <foo\+0x2f0>
000002d8 <foo\+0x2d8> ed9f0b06 vldr d0, \[pc, #24\] ; 000002f8 <foo\+0x2f8>
000002dc <foo\+0x2dc> ed9feb05 vldr d14, \[pc, #20\] ; 000002f8 <foo\+0x2f8>
000002e0 <foo\+0x2e0> eddfcb04 vldr d28, \[pc, #16\] ; 000002f8 <foo\+0x2f8>
000002e4 <foo\+0x2e4> eddffb03 vldr d31, \[pc, #12\] ; 000002f8 <foo\+0x2f8>
000002e8 <foo\+0x2e8> 00000000 .word 0x00000000
000002ec <foo\+0x2ec> 000ff000 .word 0x000ff000
000002f0 <foo\+0x2f0> f0000000 .word 0xf0000000
000002f4 <foo\+0x2f4> 0ff00fff .word 0x0ff00fff
000002f8 <foo\+0x2f8> 00000000 .word 0x00000000
000002fc <foo\+0x2fc> 000fff00 .word 0x000fff00
00000300 <foo\+0x300> f2800e30 vmov.i64 d0, #0x0000000000000000
00000304 <foo\+0x304> f280ee30 vmov.i64 d14, #0x0000000000000000
00000308 <foo\+0x308> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000030c <foo\+0x30c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000310 <foo\+0x310> f2820e30 vmov.i64 d0, #0x0000ff0000000000
00000314 <foo\+0x314> f282ee30 vmov.i64 d14, #0x0000ff0000000000
00000318 <foo\+0x318> f2c2ce30 vmov.i64 d28, #0x0000ff0000000000
0000031c <foo\+0x31c> f2c2fe30 vmov.i64 d31, #0x0000ff0000000000
00000320 <foo\+0x320> f3850e30 vmov.i64 d0, #0xffff00ff00000000
00000324 <foo\+0x324> f385ee30 vmov.i64 d14, #0xffff00ff00000000
00000328 <foo\+0x328> f3c5ce30 vmov.i64 d28, #0xffff00ff00000000
0000032c <foo\+0x32c> f3c5fe30 vmov.i64 d31, #0xffff00ff00000000
00000330 <foo\+0x330> 0d9f0b02 vldreq d0, \[pc, #8\] ; 00000340 <foo\+0x340>
00000334 <foo\+0x334> 0d9feb01 vldreq d14, \[pc, #4\] ; 00000340 <foo\+0x340>
00000338 <foo\+0x338> 0ddfcb00 vldreq d28, \[pc\] ; 00000340 <foo\+0x340>
0000033c <foo\+0x33c> 0d5ffb01 vldreq d31, \[pc, #-4\] ; 00000340 <foo\+0x340>
00000340 <foo\+0x340> 00000000 .word 0x00000000
00000344 <foo\+0x344> 000fff00 .word 0x000fff00
00000348 <foo\+0x348> f2800e30 vmov.i64 d0, #0x0000000000000000
0000034c <foo\+0x34c> f280ee30 vmov.i64 d14, #0x0000000000000000
00000350 <foo\+0x350> f2c0ce30 vmov.i64 d28, #0x0000000000000000
00000354 <foo\+0x354> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000358 <foo\+0x358> f2810e30 vmov.i64 d0, #0x000000ff00000000
0000035c <foo\+0x35c> f281ee30 vmov.i64 d14, #0x000000ff00000000
00000360 <foo\+0x360> f2c1ce30 vmov.i64 d28, #0x000000ff00000000
00000364 <foo\+0x364> f2c1fe30 vmov.i64 d31, #0x000000ff00000000
00000368 <foo\+0x368> f3860e30 vmov.i64 d0, #0xffffff0000000000
0000036c <foo\+0x36c> f386ee30 vmov.i64 d14, #0xffffff0000000000
00000370 <foo\+0x370> f3c6ce30 vmov.i64 d28, #0xffffff0000000000
00000374 <foo\+0x374> f3c6fe30 vmov.i64 d31, #0xffffff0000000000
00000378 <foo\+0x378> 4d9f0b02 vldrmi d0, \[pc, #8\] ; 00000388 <foo\+0x388>
0000037c <foo\+0x37c> 4d9feb01 vldrmi d14, \[pc, #4\] ; 00000388 <foo\+0x388>
00000380 <foo\+0x380> 4ddfcb00 vldrmi d28, \[pc\] ; 00000388 <foo\+0x388>
00000384 <foo\+0x384> 4d5ffb01 vldrmi d31, \[pc, #-4\] ; 00000388 <foo\+0x388>
00000388 <foo\+0x388> 00000000 .word 0x00000000
0000038c <foo\+0x38c> 0000fff0 .word 0x0000fff0
00000390 <foo\+0x390> ed9f1b00 vldr d1, \[pc\] ; 00000398 <foo\+0x398>
\.\.\.
0000039c <foo\+0x39c> 0000fff0 .word 0x0000fff0
000003a0 <foo\+0x3a0> e2810000 add r0, r1, #0
000003a4 <foo\+0x3a4> ed1f1b01 vldr d1, \[pc, #-4\] ; 000003a8 <foo\+0x3a8>
000003a8 <foo\+0x3a8> 00000000 .word 0x00000000
000003ac <foo\+0x3ac> 0000fff0 .word 0x0000fff0
000003b0 <foo\+0x3b0> ed9f1b10 vldr d1, \[pc, #64\] ; 000003f8 <foo\+0x3f8>
000003b4 <foo\+0x3b4> ed9f1a11 vldr s2, \[pc, #68\] ; 00000400 <foo\+0x400>
000003b8 <foo\+0x3b8> ed9f3b12 vldr d3, \[pc, #72\] ; 00000408 <foo\+0x408>
000003bc <foo\+0x3bc> ed9f2a10 vldr s4, \[pc, #64\] ; 00000404 <foo\+0x404>
000003c0 <foo\+0x3c0> ed9f5b10 vldr d5, \[pc, #64\] ; 00000408 <foo\+0x408>
000003c4 <foo\+0x3c4> ed9f6b11 vldr d6, \[pc, #68\] ; 00000410 <foo\+0x410>
000003c8 <foo\+0x3c8> ed9f7b12 vldr d7, \[pc, #72\] ; 00000418 <foo\+0x418>
000003cc <foo\+0x3cc> ed9f4a13 vldr s8, \[pc, #76\] ; 00000420 <foo\+0x420>
000003d0 <foo\+0x3d0> ed9f9b14 vldr d9, \[pc, #80\] ; 00000428 <foo\+0x428>
000003d4 <foo\+0x3d4> ed9f5a12 vldr s10, \[pc, #72\] ; 00000424 <foo\+0x424>
000003d8 <foo\+0x3d8> ed9fbb14 vldr d11, \[pc, #80\] ; 00000430 <foo\+0x430>
000003dc <foo\+0x3dc> ed9f6a15 vldr s12, \[pc, #84\] ; 00000438 <foo\+0x438>
000003e0 <foo\+0x3e0> eddf6a15 vldr s13, \[pc, #84\] ; 0000043c <foo\+0x43c>
000003e4 <foo\+0x3e4> ed9f7a06 vldr s14, \[pc, #24\] ; 00000404 <foo\+0x404>
000003e8 <foo\+0x3e8> eddf7a03 vldr s15, \[pc, #12\] ; 000003fc <foo\+0x3fc>
000003ec <foo\+0x3ec> eddf0b11 vldr d16, \[pc, #68\] ; 00000438 <foo\+0x438>
000003f0 <foo\+0x3f0> eddf1b12 vldr d17, \[pc, #72\] ; 00000440 <foo\+0x440>
\.\.\.
000003fc <foo\+0x3fc> 0000fff0 .word 0x0000fff0
00000400 <foo\+0x400> ff000000 .word 0xff000000
00000404 <foo\+0x404> ff000001 .word 0xff000001
00000408 <foo\+0x408> 00000001 .word 0x00000001
0000040c <foo\+0x40c> 0000fff0 .word 0x0000fff0
00000410 <foo\+0x410> 00000002 .word 0x00000002
00000414 <foo\+0x414> 0000fff0 .word 0x0000fff0
00000418 <foo\+0x418> 00000003 .word 0x00000003
0000041c <foo\+0x41c> 0000fff0 .word 0x0000fff0
00000420 <foo\+0x420> ff000002 .word 0xff000002
00000424 <foo\+0x424> ff000003 .word 0xff000003
00000428 <foo\+0x428> 00000004 .word 0x00000004
0000042c <foo\+0x42c> 0000fff0 .word 0x0000fff0
00000430 <foo\+0x430> 00000005 .word 0x00000005
00000434 <foo\+0x434> 0000fff0 .word 0x0000fff0
00000438 <foo\+0x438> ff000004 .word 0xff000004
0000043c <foo\+0x43c> ff000005 .word 0xff000005
00000440 <foo\+0x440> 0000fff0 .word 0x0000fff0
00000444 <foo\+0x444> ff000004 .word 0xff000004

View file

@ -0,0 +1,146 @@
@ Test file for ARM/GAS -- vldr reg, =... expressions.
.fpu neon
.text
.align
foo:
# test both low and high index of the
# Advanced SIMD and Floating-point reg.
.macro vlxr regtype const
.irp regindex, 0, 14, 28, 31
vldr \regtype\regindex, \const
.endr
.endm
.macro vlxreq regtype const
.irp regindex, 0, 14, 28, 31
vldreq \regtype\regindex, \const
.endr
.endm
.macro vlxrmi regtype const
.irp regindex, 0, 14, 28, 31
vldrmi \regtype\regindex, \const
.endr
.endm
vlxr s "=0"
vlxr s "=0xff000000"
vlxr s "=-1"
vlxr s "=0x0fff0000"
.pool
vlxr s "=0"
vlxr s "=0x00ff0000"
vlxr s "=0xff00ffff"
vlxr s "=0x00fff000"
.pool
vlxreq s "=0"
vlxreq s "=0x0000ff00"
vlxreq s "=0xffff00ff"
vlxreq s "=0x000fff00"
.pool
vlxrmi s "=0"
vlxrmi s "=0x000000ff"
vlxrmi s "=0xffffff00"
vlxrmi s "=0x0000fff0"
.pool
vlxr d "=0"
vlxr d "=0xca000000"
vlxr d "=-1"
vlxr d "=0x0fff0000"
.pool
vlxr d "=0"
vlxr d "=0x00ff0000"
vlxr d "=0xff0000ff"
vlxr d "=0x00fff000"
.pool
vlxreq d "=0"
vlxreq d "=0x0000ff00"
vlxreq d "=0xffff00ff"
vlxreq d "=0x000fff00"
.pool
vlxrmi d "=0"
vlxrmi d "=0x000000ff"
vlxrmi d "=0xffffff00"
vlxrmi d "=0x0000ffff"
.pool
vlxr d "=0"
vlxr d "=0xff00000000000000"
vlxr d "=-1"
vlxr d "=0x0fff000000000000"
.pool
vlxr d "=0"
vlxr d "=0x00ff00000000000"
vlxr d "=0xff00ffff0000000"
vlxr d "=0x00fff0000000000"
.pool
vlxreq d "=0"
vlxreq d "=0x0000ff0000000000"
vlxreq d "=0xffff00ff00000000"
vlxreq d "=0x000fff0000000000"
.pool
vlxrmi d "=0"
vlxrmi d "=0x000000ff00000000"
vlxrmi d "=0xffffff0000000000"
vlxrmi d "=0x0000fff000000000"
.pool
# pool should be aligned to 8-byte.
.p2align 3
vldr d1, =0x0000fff000000000
.pool
# no error when code is align already.
.p2align 3
add r0, r1, #0
vldr d1, =0x0000fff000000000
.pool
.p2align 3
vldr d1, =0x0000fff000000000
vldr s2, =0xff000000
# padding A
vldr d3, =0x0000fff000000001
# reuse padding slot A
vldr s4, =0xff000001
# reuse d3
vldr d5, =0x0000fff000000001
# new 8-byte entry
vldr d6, =0x0000fff000000002
# new 8-byte entry
vldr d7, =0x0000fff000000003
# new 4-byte entry
vldr s8, =0xff000002
# padding B
vldr d9, =0x0000fff000000004
# reuse padding slot B
vldr s10, =0xff000003
# new 8-byte entry
vldr d11, =0x0000fff000000005
# new 4 entry
vldr s12, =0xff000004
# new 4 entry
vldr s13, =0xff000005
# reuse value of s4 in pool
vldr s14, =0xff000001
# reuse high part of d1 in pool
vldr s15, =0x0000fff0
# 8-byte entry reuse two 4-byte entries.
# this reuse should only happen for
# little-endian
# d16 reuse s12, s13
vldr d16, =0xff000005ff000004
# d17 should not reuse high part of d11 and s12.
# because the it's align 8-byte aligned.
vldr d17, =0xff0000040000fff0
.pool

View file

@ -0,0 +1,285 @@
#objdump: -dr --prefix-addresses --show-raw-insn
#name: ARM vldr with immediate constant (Big Endian)
#as: -mcpu=arm7m -mbig-endian
#skip: *-*-*coff *-*-pe *-*-wince *-*-*aout* *-*-netbsd
#source: vldconst.s
.*: +file format .*arm.*
Disassembly of section .text:
00000000 <foo> ed9f0a0e vldr s0, \[pc, #56\] ; 00000040 <foo\+0x40>
00000004 <foo\+0x4> ed9f7a0d vldr s14, \[pc, #52\] ; 00000040 <foo\+0x40>
00000008 <foo\+0x8> ed9fea0c vldr s28, \[pc, #48\] ; 00000040 <foo\+0x40>
0000000c <foo\+0xc> eddffa0b vldr s31, \[pc, #44\] ; 00000040 <foo\+0x40>
00000010 <foo\+0x10> ed9f0a0b vldr s0, \[pc, #44\] ; 00000044 <foo\+0x44>
00000014 <foo\+0x14> ed9f7a0a vldr s14, \[pc, #40\] ; 00000044 <foo\+0x44>
00000018 <foo\+0x18> ed9fea09 vldr s28, \[pc, #36\] ; 00000044 <foo\+0x44>
0000001c <foo\+0x1c> eddffa08 vldr s31, \[pc, #32\] ; 00000044 <foo\+0x44>
00000020 <foo\+0x20> ed9f0a08 vldr s0, \[pc, #32\] ; 00000048 <foo\+0x48>
00000024 <foo\+0x24> ed9f7a07 vldr s14, \[pc, #28\] ; 00000048 <foo\+0x48>
00000028 <foo\+0x28> ed9fea06 vldr s28, \[pc, #24\] ; 00000048 <foo\+0x48>
0000002c <foo\+0x2c> eddffa05 vldr s31, \[pc, #20\] ; 00000048 <foo\+0x48>
00000030 <foo\+0x30> ed9f0a05 vldr s0, \[pc, #20\] ; 0000004c <foo\+0x4c>
00000034 <foo\+0x34> ed9f7a04 vldr s14, \[pc, #16\] ; 0000004c <foo\+0x4c>
00000038 <foo\+0x38> ed9fea03 vldr s28, \[pc, #12\] ; 0000004c <foo\+0x4c>
0000003c <foo\+0x3c> eddffa02 vldr s31, \[pc, #8\] ; 0000004c <foo\+0x4c>
00000040 <foo\+0x40> 00000000 .word 0x00000000
00000044 <foo\+0x44> ff000000 .word 0xff000000
00000048 <foo\+0x48> ffffffff .word 0xffffffff
0000004c <foo\+0x4c> 0fff0000 .word 0x0fff0000
00000050 <foo\+0x50> ed9f0a0e vldr s0, \[pc, #56\] ; 00000090 <foo\+0x90>
00000054 <foo\+0x54> ed9f7a0d vldr s14, \[pc, #52\] ; 00000090 <foo\+0x90>
00000058 <foo\+0x58> ed9fea0c vldr s28, \[pc, #48\] ; 00000090 <foo\+0x90>
0000005c <foo\+0x5c> eddffa0b vldr s31, \[pc, #44\] ; 00000090 <foo\+0x90>
00000060 <foo\+0x60> ed9f0a0b vldr s0, \[pc, #44\] ; 00000094 <foo\+0x94>
00000064 <foo\+0x64> ed9f7a0a vldr s14, \[pc, #40\] ; 00000094 <foo\+0x94>
00000068 <foo\+0x68> ed9fea09 vldr s28, \[pc, #36\] ; 00000094 <foo\+0x94>
0000006c <foo\+0x6c> eddffa08 vldr s31, \[pc, #32\] ; 00000094 <foo\+0x94>
00000070 <foo\+0x70> ed9f0a08 vldr s0, \[pc, #32\] ; 00000098 <foo\+0x98>
00000074 <foo\+0x74> ed9f7a07 vldr s14, \[pc, #28\] ; 00000098 <foo\+0x98>
00000078 <foo\+0x78> ed9fea06 vldr s28, \[pc, #24\] ; 00000098 <foo\+0x98>
0000007c <foo\+0x7c> eddffa05 vldr s31, \[pc, #20\] ; 00000098 <foo\+0x98>
00000080 <foo\+0x80> ed9f0a05 vldr s0, \[pc, #20\] ; 0000009c <foo\+0x9c>
00000084 <foo\+0x84> ed9f7a04 vldr s14, \[pc, #16\] ; 0000009c <foo\+0x9c>
00000088 <foo\+0x88> ed9fea03 vldr s28, \[pc, #12\] ; 0000009c <foo\+0x9c>
0000008c <foo\+0x8c> eddffa02 vldr s31, \[pc, #8\] ; 0000009c <foo\+0x9c>
00000090 <foo\+0x90> 00000000 .word 0x00000000
00000094 <foo\+0x94> 00ff0000 .word 0x00ff0000
00000098 <foo\+0x98> ff00ffff .word 0xff00ffff
0000009c <foo\+0x9c> 00fff000 .word 0x00fff000
000000a0 <foo\+0xa0> 0d9f0a0e vldreq s0, \[pc, #56\] ; 000000e0 <foo\+0xe0>
000000a4 <foo\+0xa4> 0d9f7a0d vldreq s14, \[pc, #52\] ; 000000e0 <foo\+0xe0>
000000a8 <foo\+0xa8> 0d9fea0c vldreq s28, \[pc, #48\] ; 000000e0 <foo\+0xe0>
000000ac <foo\+0xac> 0ddffa0b vldreq s31, \[pc, #44\] ; 000000e0 <foo\+0xe0>
000000b0 <foo\+0xb0> 0d9f0a0b vldreq s0, \[pc, #44\] ; 000000e4 <foo\+0xe4>
000000b4 <foo\+0xb4> 0d9f7a0a vldreq s14, \[pc, #40\] ; 000000e4 <foo\+0xe4>
000000b8 <foo\+0xb8> 0d9fea09 vldreq s28, \[pc, #36\] ; 000000e4 <foo\+0xe4>
000000bc <foo\+0xbc> 0ddffa08 vldreq s31, \[pc, #32\] ; 000000e4 <foo\+0xe4>
000000c0 <foo\+0xc0> 0d9f0a08 vldreq s0, \[pc, #32\] ; 000000e8 <foo\+0xe8>
000000c4 <foo\+0xc4> 0d9f7a07 vldreq s14, \[pc, #28\] ; 000000e8 <foo\+0xe8>
000000c8 <foo\+0xc8> 0d9fea06 vldreq s28, \[pc, #24\] ; 000000e8 <foo\+0xe8>
000000cc <foo\+0xcc> 0ddffa05 vldreq s31, \[pc, #20\] ; 000000e8 <foo\+0xe8>
000000d0 <foo\+0xd0> 0d9f0a05 vldreq s0, \[pc, #20\] ; 000000ec <foo\+0xec>
000000d4 <foo\+0xd4> 0d9f7a04 vldreq s14, \[pc, #16\] ; 000000ec <foo\+0xec>
000000d8 <foo\+0xd8> 0d9fea03 vldreq s28, \[pc, #12\] ; 000000ec <foo\+0xec>
000000dc <foo\+0xdc> 0ddffa02 vldreq s31, \[pc, #8\] ; 000000ec <foo\+0xec>
000000e0 <foo\+0xe0> 00000000 .word 0x00000000
000000e4 <foo\+0xe4> 0000ff00 .word 0x0000ff00
000000e8 <foo\+0xe8> ffff00ff .word 0xffff00ff
000000ec <foo\+0xec> 000fff00 .word 0x000fff00
000000f0 <foo\+0xf0> 4d9f0a0e vldrmi s0, \[pc, #56\] ; 00000130 <foo\+0x130>
000000f4 <foo\+0xf4> 4d9f7a0d vldrmi s14, \[pc, #52\] ; 00000130 <foo\+0x130>
000000f8 <foo\+0xf8> 4d9fea0c vldrmi s28, \[pc, #48\] ; 00000130 <foo\+0x130>
000000fc <foo\+0xfc> 4ddffa0b vldrmi s31, \[pc, #44\] ; 00000130 <foo\+0x130>
00000100 <foo\+0x100> 4d9f0a0b vldrmi s0, \[pc, #44\] ; 00000134 <foo\+0x134>
00000104 <foo\+0x104> 4d9f7a0a vldrmi s14, \[pc, #40\] ; 00000134 <foo\+0x134>
00000108 <foo\+0x108> 4d9fea09 vldrmi s28, \[pc, #36\] ; 00000134 <foo\+0x134>
0000010c <foo\+0x10c> 4ddffa08 vldrmi s31, \[pc, #32\] ; 00000134 <foo\+0x134>
00000110 <foo\+0x110> 4d9f0a08 vldrmi s0, \[pc, #32\] ; 00000138 <foo\+0x138>
00000114 <foo\+0x114> 4d9f7a07 vldrmi s14, \[pc, #28\] ; 00000138 <foo\+0x138>
00000118 <foo\+0x118> 4d9fea06 vldrmi s28, \[pc, #24\] ; 00000138 <foo\+0x138>
0000011c <foo\+0x11c> 4ddffa05 vldrmi s31, \[pc, #20\] ; 00000138 <foo\+0x138>
00000120 <foo\+0x120> 4d9f0a05 vldrmi s0, \[pc, #20\] ; 0000013c <foo\+0x13c>
00000124 <foo\+0x124> 4d9f7a04 vldrmi s14, \[pc, #16\] ; 0000013c <foo\+0x13c>
00000128 <foo\+0x128> 4d9fea03 vldrmi s28, \[pc, #12\] ; 0000013c <foo\+0x13c>
0000012c <foo\+0x12c> 4ddffa02 vldrmi s31, \[pc, #8\] ; 0000013c <foo\+0x13c>
00000130 <foo\+0x130> 00000000 .word 0x00000000
00000134 <foo\+0x134> 000000ff .word 0x000000ff
00000138 <foo\+0x138> ffffff00 .word 0xffffff00
0000013c <foo\+0x13c> 0000fff0 .word 0x0000fff0
00000140 <foo\+0x140> f2800e30 vmov.i64 d0, #0x0000000000000000
00000144 <foo\+0x144> f280ee30 vmov.i64 d14, #0x0000000000000000
00000148 <foo\+0x148> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000014c <foo\+0x14c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000150 <foo\+0x150> ed9f0b0a vldr d0, \[pc, #40\] ; 00000180 <foo\+0x180>
00000154 <foo\+0x154> ed9feb09 vldr d14, \[pc, #36\] ; 00000180 <foo\+0x180>
00000158 <foo\+0x158> eddfcb08 vldr d28, \[pc, #32\] ; 00000180 <foo\+0x180>
0000015c <foo\+0x15c> eddffb07 vldr d31, \[pc, #28\] ; 00000180 <foo\+0x180>
00000160 <foo\+0x160> f3870e3f vmov.i64 d0, #0xffffffffffffffff
00000164 <foo\+0x164> f387ee3f vmov.i64 d14, #0xffffffffffffffff
00000168 <foo\+0x168> f3c7ce3f vmov.i64 d28, #0xffffffffffffffff
0000016c <foo\+0x16c> f3c7fe3f vmov.i64 d31, #0xffffffffffffffff
00000170 <foo\+0x170> ed9f0b04 vldr d0, \[pc, #16\] ; 00000188 <foo\+0x188>
00000174 <foo\+0x174> ed9feb03 vldr d14, \[pc, #12\] ; 00000188 <foo\+0x188>
00000178 <foo\+0x178> eddfcb02 vldr d28, \[pc, #8\] ; 00000188 <foo\+0x188>
0000017c <foo\+0x17c> eddffb01 vldr d31, \[pc, #4\] ; 00000188 <foo\+0x188>
00000180 <foo\+0x180> 00000000 .word 0x00000000
00000184 <foo\+0x184> ca000000 .word 0xca000000
00000188 <foo\+0x188> 00000000 .word 0x00000000
0000018c <foo\+0x18c> 0fff0000 .word 0x0fff0000
00000190 <foo\+0x190> f2800e30 vmov.i64 d0, #0x0000000000000000
00000194 <foo\+0x194> f280ee30 vmov.i64 d14, #0x0000000000000000
00000198 <foo\+0x198> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000019c <foo\+0x19c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
000001a0 <foo\+0x1a0> f2800e34 vmov.i64 d0, #0x0000000000ff0000
000001a4 <foo\+0x1a4> f280ee34 vmov.i64 d14, #0x0000000000ff0000
000001a8 <foo\+0x1a8> f2c0ce34 vmov.i64 d28, #0x0000000000ff0000
000001ac <foo\+0x1ac> f2c0fe34 vmov.i64 d31, #0x0000000000ff0000
000001b0 <foo\+0x1b0> f2800e39 vmov.i64 d0, #0x00000000ff0000ff
000001b4 <foo\+0x1b4> f280ee39 vmov.i64 d14, #0x00000000ff0000ff
000001b8 <foo\+0x1b8> f2c0ce39 vmov.i64 d28, #0x00000000ff0000ff
000001bc <foo\+0x1bc> f2c0fe39 vmov.i64 d31, #0x00000000ff0000ff
000001c0 <foo\+0x1c0> ed9f0b02 vldr d0, \[pc, #8\] ; 000001d0 <foo\+0x1d0>
000001c4 <foo\+0x1c4> ed9feb01 vldr d14, \[pc, #4\] ; 000001d0 <foo\+0x1d0>
000001c8 <foo\+0x1c8> eddfcb00 vldr d28, \[pc\] ; 000001d0 <foo\+0x1d0>
000001cc <foo\+0x1cc> ed5ffb01 vldr d31, \[pc, #-4\] ; 000001d0 <foo\+0x1d0>
000001d0 <foo\+0x1d0> 00000000 .word 0x00000000
000001d4 <foo\+0x1d4> 00fff000 .word 0x00fff000
000001d8 <foo\+0x1d8> f2800e30 vmov.i64 d0, #0x0000000000000000
000001dc <foo\+0x1dc> f280ee30 vmov.i64 d14, #0x0000000000000000
000001e0 <foo\+0x1e0> f2c0ce30 vmov.i64 d28, #0x0000000000000000
000001e4 <foo\+0x1e4> f2c0fe30 vmov.i64 d31, #0x0000000000000000
000001e8 <foo\+0x1e8> f2800e32 vmov.i64 d0, #0x000000000000ff00
000001ec <foo\+0x1ec> f280ee32 vmov.i64 d14, #0x000000000000ff00
000001f0 <foo\+0x1f0> f2c0ce32 vmov.i64 d28, #0x000000000000ff00
000001f4 <foo\+0x1f4> f2c0fe32 vmov.i64 d31, #0x000000000000ff00
000001f8 <foo\+0x1f8> f2800e3d vmov.i64 d0, #0x00000000ffff00ff
000001fc <foo\+0x1fc> f280ee3d vmov.i64 d14, #0x00000000ffff00ff
00000200 <foo\+0x200> f2c0ce3d vmov.i64 d28, #0x00000000ffff00ff
00000204 <foo\+0x204> f2c0fe3d vmov.i64 d31, #0x00000000ffff00ff
00000208 <foo\+0x208> 0d9f0b02 vldreq d0, \[pc, #8\] ; 00000218 <foo\+0x218>
0000020c <foo\+0x20c> 0d9feb01 vldreq d14, \[pc, #4\] ; 00000218 <foo\+0x218>
00000210 <foo\+0x210> 0ddfcb00 vldreq d28, \[pc\] ; 00000218 <foo\+0x218>
00000214 <foo\+0x214> 0d5ffb01 vldreq d31, \[pc, #-4\] ; 00000218 <foo\+0x218>
00000218 <foo\+0x218> 00000000 .word 0x00000000
0000021c <foo\+0x21c> 000fff00 .word 0x000fff00
00000220 <foo\+0x220> f2800e30 vmov.i64 d0, #0x0000000000000000
00000224 <foo\+0x224> f280ee30 vmov.i64 d14, #0x0000000000000000
00000228 <foo\+0x228> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000022c <foo\+0x22c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000230 <foo\+0x230> f2800e31 vmov.i64 d0, #0x00000000000000ff
00000234 <foo\+0x234> f280ee31 vmov.i64 d14, #0x00000000000000ff
00000238 <foo\+0x238> f2c0ce31 vmov.i64 d28, #0x00000000000000ff
0000023c <foo\+0x23c> f2c0fe31 vmov.i64 d31, #0x00000000000000ff
00000240 <foo\+0x240> f2800e3e vmov.i64 d0, #0x00000000ffffff00
00000244 <foo\+0x244> f280ee3e vmov.i64 d14, #0x00000000ffffff00
00000248 <foo\+0x248> f2c0ce3e vmov.i64 d28, #0x00000000ffffff00
0000024c <foo\+0x24c> f2c0fe3e vmov.i64 d31, #0x00000000ffffff00
00000250 <foo\+0x250> f2800e33 vmov.i64 d0, #0x000000000000ffff
00000254 <foo\+0x254> f280ee33 vmov.i64 d14, #0x000000000000ffff
00000258 <foo\+0x258> f2c0ce33 vmov.i64 d28, #0x000000000000ffff
0000025c <foo\+0x25c> f2c0fe33 vmov.i64 d31, #0x000000000000ffff
00000260 <foo\+0x260> f2800e30 vmov.i64 d0, #0x0000000000000000
00000264 <foo\+0x264> f280ee30 vmov.i64 d14, #0x0000000000000000
00000268 <foo\+0x268> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000026c <foo\+0x26c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000270 <foo\+0x270> f3800e30 vmov.i64 d0, #0xff00000000000000
00000274 <foo\+0x274> f380ee30 vmov.i64 d14, #0xff00000000000000
00000278 <foo\+0x278> f3c0ce30 vmov.i64 d28, #0xff00000000000000
0000027c <foo\+0x27c> f3c0fe30 vmov.i64 d31, #0xff00000000000000
00000280 <foo\+0x280> f3870e3f vmov.i64 d0, #0xffffffffffffffff
00000284 <foo\+0x284> f387ee3f vmov.i64 d14, #0xffffffffffffffff
00000288 <foo\+0x288> f3c7ce3f vmov.i64 d28, #0xffffffffffffffff
0000028c <foo\+0x28c> f3c7fe3f vmov.i64 d31, #0xffffffffffffffff
00000290 <foo\+0x290> ed9f0b02 vldr d0, \[pc, #8\] ; 000002a0 <foo\+0x2a0>
00000294 <foo\+0x294> ed9feb01 vldr d14, \[pc, #4\] ; 000002a0 <foo\+0x2a0>
00000298 <foo\+0x298> eddfcb00 vldr d28, \[pc\] ; 000002a0 <foo\+0x2a0>
0000029c <foo\+0x29c> ed5ffb01 vldr d31, \[pc, #-4\] ; 000002a0 <foo\+0x2a0>
000002a0 <foo\+0x2a0> 0fff0000 .word 0x0fff0000
000002a4 <foo\+0x2a4> 00000000 .word 0x00000000
000002a8 <foo\+0x2a8> f2800e30 vmov.i64 d0, #0x0000000000000000
000002ac <foo\+0x2ac> f280ee30 vmov.i64 d14, #0x0000000000000000
000002b0 <foo\+0x2b0> f2c0ce30 vmov.i64 d28, #0x0000000000000000
000002b4 <foo\+0x2b4> f2c0fe30 vmov.i64 d31, #0x0000000000000000
000002b8 <foo\+0x2b8> ed9f0b0a vldr d0, \[pc, #40\] ; 000002e8 <foo\+0x2e8>
000002bc <foo\+0x2bc> ed9feb09 vldr d14, \[pc, #36\] ; 000002e8 <foo\+0x2e8>
000002c0 <foo\+0x2c0> eddfcb08 vldr d28, \[pc, #32\] ; 000002e8 <foo\+0x2e8>
000002c4 <foo\+0x2c4> eddffb07 vldr d31, \[pc, #28\] ; 000002e8 <foo\+0x2e8>
000002c8 <foo\+0x2c8> ed9f0b08 vldr d0, \[pc, #32\] ; 000002f0 <foo\+0x2f0>
000002cc <foo\+0x2cc> ed9feb07 vldr d14, \[pc, #28\] ; 000002f0 <foo\+0x2f0>
000002d0 <foo\+0x2d0> eddfcb06 vldr d28, \[pc, #24\] ; 000002f0 <foo\+0x2f0>
000002d4 <foo\+0x2d4> eddffb05 vldr d31, \[pc, #20\] ; 000002f0 <foo\+0x2f0>
000002d8 <foo\+0x2d8> ed9f0b06 vldr d0, \[pc, #24\] ; 000002f8 <foo\+0x2f8>
000002dc <foo\+0x2dc> ed9feb05 vldr d14, \[pc, #20\] ; 000002f8 <foo\+0x2f8>
000002e0 <foo\+0x2e0> eddfcb04 vldr d28, \[pc, #16\] ; 000002f8 <foo\+0x2f8>
000002e4 <foo\+0x2e4> eddffb03 vldr d31, \[pc, #12\] ; 000002f8 <foo\+0x2f8>
000002e8 <foo\+0x2e8> 000ff000 .word 0x000ff000
000002ec <foo\+0x2ec> 00000000 .word 0x00000000
000002f0 <foo\+0x2f0> 0ff00fff .word 0x0ff00fff
000002f4 <foo\+0x2f4> f0000000 .word 0xf0000000
000002f8 <foo\+0x2f8> 000fff00 .word 0x000fff00
000002fc <foo\+0x2fc> 00000000 .word 0x00000000
00000300 <foo\+0x300> f2800e30 vmov.i64 d0, #0x0000000000000000
00000304 <foo\+0x304> f280ee30 vmov.i64 d14, #0x0000000000000000
00000308 <foo\+0x308> f2c0ce30 vmov.i64 d28, #0x0000000000000000
0000030c <foo\+0x30c> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000310 <foo\+0x310> f2820e30 vmov.i64 d0, #0x0000ff0000000000
00000314 <foo\+0x314> f282ee30 vmov.i64 d14, #0x0000ff0000000000
00000318 <foo\+0x318> f2c2ce30 vmov.i64 d28, #0x0000ff0000000000
0000031c <foo\+0x31c> f2c2fe30 vmov.i64 d31, #0x0000ff0000000000
00000320 <foo\+0x320> f3850e30 vmov.i64 d0, #0xffff00ff00000000
00000324 <foo\+0x324> f385ee30 vmov.i64 d14, #0xffff00ff00000000
00000328 <foo\+0x328> f3c5ce30 vmov.i64 d28, #0xffff00ff00000000
0000032c <foo\+0x32c> f3c5fe30 vmov.i64 d31, #0xffff00ff00000000
00000330 <foo\+0x330> 0d9f0b02 vldreq d0, \[pc, #8\] ; 00000340 <foo\+0x340>
00000334 <foo\+0x334> 0d9feb01 vldreq d14, \[pc, #4\] ; 00000340 <foo\+0x340>
00000338 <foo\+0x338> 0ddfcb00 vldreq d28, \[pc\] ; 00000340 <foo\+0x340>
0000033c <foo\+0x33c> 0d5ffb01 vldreq d31, \[pc, #-4\] ; 00000340 <foo\+0x340>
00000340 <foo\+0x340> 000fff00 .word 0x000fff00
00000344 <foo\+0x344> 00000000 .word 0x00000000
00000348 <foo\+0x348> f2800e30 vmov.i64 d0, #0x0000000000000000
0000034c <foo\+0x34c> f280ee30 vmov.i64 d14, #0x0000000000000000
00000350 <foo\+0x350> f2c0ce30 vmov.i64 d28, #0x0000000000000000
00000354 <foo\+0x354> f2c0fe30 vmov.i64 d31, #0x0000000000000000
00000358 <foo\+0x358> f2810e30 vmov.i64 d0, #0x000000ff00000000
0000035c <foo\+0x35c> f281ee30 vmov.i64 d14, #0x000000ff00000000
00000360 <foo\+0x360> f2c1ce30 vmov.i64 d28, #0x000000ff00000000
00000364 <foo\+0x364> f2c1fe30 vmov.i64 d31, #0x000000ff00000000
00000368 <foo\+0x368> f3860e30 vmov.i64 d0, #0xffffff0000000000
0000036c <foo\+0x36c> f386ee30 vmov.i64 d14, #0xffffff0000000000
00000370 <foo\+0x370> f3c6ce30 vmov.i64 d28, #0xffffff0000000000
00000374 <foo\+0x374> f3c6fe30 vmov.i64 d31, #0xffffff0000000000
00000378 <foo\+0x378> 4d9f0b02 vldrmi d0, \[pc, #8\] ; 00000388 <foo\+0x388>
0000037c <foo\+0x37c> 4d9feb01 vldrmi d14, \[pc, #4\] ; 00000388 <foo\+0x388>
00000380 <foo\+0x380> 4ddfcb00 vldrmi d28, \[pc\] ; 00000388 <foo\+0x388>
00000384 <foo\+0x384> 4d5ffb01 vldrmi d31, \[pc, #-4\] ; 00000388 <foo\+0x388>
00000388 <foo\+0x388> 0000fff0 .word 0x0000fff0
0000038c <foo\+0x38c> 00000000 .word 0x00000000
00000390 <foo\+0x390> ed9f1b00 vldr d1, \[pc\] ; 00000398 <foo\+0x398>
00000394 <foo\+0x394> 00000000 andeq r0, r0, r0
00000398 <foo\+0x398> 0000fff0 .word 0x0000fff0
0000039c <foo\+0x39c> 00000000 .word 0x00000000
000003a0 <foo\+0x3a0> e2810000 add r0, r1, #0
000003a4 <foo\+0x3a4> ed1f1b01 vldr d1, \[pc, #-4\] ; 000003a8 <foo\+0x3a8>
000003a8 <foo\+0x3a8> 0000fff0 .word 0x0000fff0
000003ac <foo\+0x3ac> 00000000 .word 0x00000000
000003b0 <foo\+0x3b0> ed9f1b10 vldr d1, \[pc, #64\] ; 000003f8 <foo\+0x3f8>
000003b4 <foo\+0x3b4> ed9f1a11 vldr s2, \[pc, #68\] ; 00000400 <foo\+0x400>
000003b8 <foo\+0x3b8> ed9f3b12 vldr d3, \[pc, #72\] ; 00000408 <foo\+0x408>
000003bc <foo\+0x3bc> ed9f2a10 vldr s4, \[pc, #64\] ; 00000404 <foo\+0x404>
000003c0 <foo\+0x3c0> ed9f5b10 vldr d5, \[pc, #64\] ; 00000408 <foo\+0x408>
000003c4 <foo\+0x3c4> ed9f6b11 vldr d6, \[pc, #68\] ; 00000410 <foo\+0x410>
000003c8 <foo\+0x3c8> ed9f7b12 vldr d7, \[pc, #72\] ; 00000418 <foo\+0x418>
000003cc <foo\+0x3cc> ed9f4a13 vldr s8, \[pc, #76\] ; 00000420 <foo\+0x420>
000003d0 <foo\+0x3d0> ed9f9b14 vldr d9, \[pc, #80\] ; 00000428 <foo\+0x428>
000003d4 <foo\+0x3d4> ed9f5a12 vldr s10, \[pc, #72\] ; 00000424 <foo\+0x424>
000003d8 <foo\+0x3d8> ed9fbb14 vldr d11, \[pc, #80\] ; 00000430 <foo\+0x430>
000003dc <foo\+0x3dc> ed9f6a15 vldr s12, \[pc, #84\] ; 00000438 <foo\+0x438>
000003e0 <foo\+0x3e0> eddf6a15 vldr s13, \[pc, #84\] ; 0000043c <foo\+0x43c>
000003e4 <foo\+0x3e4> ed9f7a06 vldr s14, \[pc, #24\] ; 00000404 <foo\+0x404>
000003e8 <foo\+0x3e8> eddf7a02 vldr s15, \[pc, #8\] ; 000003f8 <foo\+0x3f8>
000003ec <foo\+0x3ec> eddf0b13 vldr d16, \[pc, #76\] ; 00000440 <foo\+0x440>
000003f0 <foo\+0x3f0> eddf1b14 vldr d17, \[pc, #80\] ; 00000448 <foo\+0x448>
000003f4 <foo\+0x3f4> 00000000 andeq r0, r0, r0
000003f8 <foo\+0x3f8> 0000fff0 .word 0x0000fff0
000003fc <foo\+0x3fc> 00000000 .word 0x00000000
00000400 <foo\+0x400> ff000000 .word 0xff000000
00000404 <foo\+0x404> ff000001 .word 0xff000001
00000408 <foo\+0x408> 0000fff0 .word 0x0000fff0
0000040c <foo\+0x40c> 00000001 .word 0x00000001
00000410 <foo\+0x410> 0000fff0 .word 0x0000fff0
00000414 <foo\+0x414> 00000002 .word 0x00000002
00000418 <foo\+0x418> 0000fff0 .word 0x0000fff0
0000041c <foo\+0x41c> 00000003 .word 0x00000003
00000420 <foo\+0x420> ff000002 .word 0xff000002
00000424 <foo\+0x424> ff000003 .word 0xff000003
00000428 <foo\+0x428> 0000fff0 .word 0x0000fff0
0000042c <foo\+0x42c> 00000004 .word 0x00000004
00000430 <foo\+0x430> 0000fff0 .word 0x0000fff0
00000434 <foo\+0x434> 00000005 .word 0x00000005
00000438 <foo\+0x438> ff000004 .word 0xff000004
0000043c <foo\+0x43c> ff000005 .word 0xff000005
00000440 <foo\+0x440> ff000005 .word 0xff000005
00000444 <foo\+0x444> ff000004 .word 0xff000004
00000448 <foo\+0x448> ff000004 .word 0xff000004
0000044c <foo\+0x44c> 0000fff0 .word 0x0000fff0