From patchwork Tue Nov 20 16:26:03 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: [committed] AIX largetoc fixes Date: Tue, 20 Nov 2012 06:26:03 -0000 From: David Edelsohn X-Patchwork-Id: 200387 Message-Id: To: GCC Patches The AIX assembler prefers "la" mnemonic and syntax over "addi" for cmodel=large. Bootstrapped on powerpc-ibm-aix7.1.0.0 and powerpc64-linux. David * config/rs6000/rs6000.md (largetoc_low): Revert. (largetoc_low_aix): New. Index: rs6000.md =================================================================== --- rs6000.md (revision 193665) +++ rs6000.md (working copy) @@ -10354,15 +10354,22 @@ "TARGET_XCOFF && TARGET_CMODEL != CMODEL_SMALL" "addis %0,%1+%3@u(%2)") -(define_insn "*largetoc_low" - [(set (match_operand:P 0 "gpc_reg_operand" "=r,r") - (lo_sum:P (match_operand:P 1 "gpc_reg_operand" "b,!*r") - (match_operand:P 2 "" "")))] - "TARGET_TOC && TARGET_CMODEL != CMODEL_SMALL" +(define_insn "*largetoc_low" + [(set (match_operand:DI 0 "gpc_reg_operand" "=r,r") + (lo_sum:DI (match_operand:DI 1 "gpc_reg_operand" "b,!*r") + (match_operand:DI 2 "" "")))] + "TARGET_ELF && TARGET_CMODEL != CMODEL_SMALL" "@ addi %0,%1,%2@l addic %0,%1,%2@l") +(define_insn "*largetoc_low_aix" + [(set (match_operand:P 0 "gpc_reg_operand" "=r") + (lo_sum:P (match_operand:P 1 "gpc_reg_operand" "b") + (match_operand:P 2 "" "")))] + "TARGET_XCOFF && TARGET_CMODEL != CMODEL_SMALL" + "la %0,%2@l(%1)") + (define_insn_and_split "*tocref" [(set (match_operand:P 0 "gpc_reg_operand" "=b*r") (match_operand:P 1 "small_toc_ref" "R"))]