+2012-05-29 Chris Schlumberger-Socha <chris.schlumberger-socha@arm.com>
+ Marcus Shawcroft <marcus.shawcroft@arm.com>
+
+ * config/aarch64/aarch64-protos.h (aarch64_symbol_type): Define
+ SYMBOL_TINY_ABSOLUTE.
+ * config/aarch64/aarch64.c (aarch64_load_symref_appropriately): Handle
+ SYMBOL_TINY_ABSOLUTE.
+ (aarch64_expand_mov_immediate): Likewise.
+ (aarch64_classify_symbol): Likewise.
+ (aarch64_mov_operand_p): Remove ATTRIBUTE_UNUSED.
+ Permit SYMBOL_TINY_ABSOLUTE.
+ * config/aarch64/predicates.md (aarch64_mov_operand): Permit CONST.
+
2013-05-29 Chris Schlumberger-Socha <chris.schlumberger-socha@arm.com>
Marcus Shawcroft <marcus.shawcroft@arm.com>
return;
}
+ case SYMBOL_TINY_ABSOLUTE:
+ emit_insn (gen_rtx_SET (Pmode, dest, imm));
+ return;
+
case SYMBOL_SMALL_GOT:
{
rtx tmp_reg = dest;
case SYMBOL_SMALL_TPREL:
case SYMBOL_SMALL_ABSOLUTE:
+ case SYMBOL_TINY_ABSOLUTE:
aarch64_load_symref_appropriately (dest, imm, sty);
return;
case AARCH64_CMODEL_TINY_PIC:
case AARCH64_CMODEL_TINY:
+ return SYMBOL_TINY_ABSOLUTE;
+
case AARCH64_CMODEL_SMALL_PIC:
case AARCH64_CMODEL_SMALL:
return SYMBOL_SMALL_ABSOLUTE;
switch (aarch64_cmodel)
{
case AARCH64_CMODEL_TINY:
+ if (SYMBOL_REF_WEAK (x))
+ return SYMBOL_FORCE_TO_MEM;
+ return SYMBOL_TINY_ABSOLUTE;
+
case AARCH64_CMODEL_SMALL:
if (SYMBOL_REF_WEAK (x))
return SYMBOL_FORCE_TO_MEM;
bool
aarch64_mov_operand_p (rtx x,
- enum aarch64_symbol_context context ATTRIBUTE_UNUSED,
+ enum aarch64_symbol_context context,
enum machine_mode mode)
{
-
if (GET_CODE (x) == HIGH
&& aarch64_valid_symref (XEXP (x, 0), GET_MODE (XEXP (x, 0))))
return true;
if (GET_CODE (x) == SYMBOL_REF && mode == DImode && CONSTANT_ADDRESS_P (x))
return true;
- return false;
+ return aarch64_classify_symbolic_expression (x, context)
+ == SYMBOL_TINY_ABSOLUTE;
}
/* Return a const_int vector of VAL. */
})
(define_predicate "aarch64_mov_operand"
- (and (match_code "reg,subreg,mem,const_int,symbol_ref,high")
+ (and (match_code "reg,subreg,mem,const,const_int,symbol_ref,label_ref,high")
(ior (match_operand 0 "register_operand")
(ior (match_operand 0 "memory_operand")
(match_test "aarch64_mov_operand_p (op, SYMBOL_CONTEXT_ADR, mode)")))))