From 19f2f6a9c4aeb0e37d448cb5593164e25ab055a9 Mon Sep 17 00:00:00 2001
From: Jiong Wang <jiong.wang@arm.com>
Date: Tue, 15 Jul 2014 10:15:43 +0100
Subject: [ARM] Fix 32-bit host build failure.

  gas/
    * config/tc-arm.c (add_to_lit_pool): Use "inst.operands[1].imm" for * sign
    extension.  Casting the type of imm1 and imm2 to offsetT.  Fix one logic
    error when checking X_op.
---
 gas/ChangeLog       |  6 ++++++
 gas/config/tc-arm.c | 10 +++++-----
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/gas/ChangeLog b/gas/ChangeLog
index 9f5a8af..512bd03 100644
--- a/gas/ChangeLog
+++ b/gas/ChangeLog
@@ -1,3 +1,9 @@
+2014-07-15  Jiong Wang  <jiong.wang@arm.com>
+
+	* config/tc-arm.c (add_to_lit_pool): Use "inst.operands[1].imm" for
+	sign extension.  Casting the type of imm1 and imm2 to offsetT.  Fix
+	one logic error when checking X_op.
+
 2014-07-14  Andreas Schwab  <schwab@linux-m68k.org>
 
 	* config/tc-m68k.c (md_convert_frag_1): Don't complain with
diff --git a/gas/config/tc-arm.c b/gas/config/tc-arm.c
index 2f13238..7fb8b23 100644
--- a/gas/config/tc-arm.c
+++ b/gas/config/tc-arm.c
@@ -3198,7 +3198,7 @@ add_to_lit_pool (unsigned int nbytes)
       imm1 = inst.operands[1].imm;
       imm2 = (inst.operands[1].regisimm ? inst.operands[1].reg
 	       : inst.reloc.exp.X_unsigned ? 0
-	       : ((int64_t)(imm1)) >> 32);
+	       : ((int64_t) inst.operands[1].imm) >> 32);
       if (target_big_endian)
 	{
 	  imm1 = imm2;
@@ -3237,11 +3237,11 @@ add_to_lit_pool (unsigned int nbytes)
 	       && !(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_add_number == (offsetT) 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_add_number == (offsetT) imm2)
 	       && (pool->literals[entry + 1].X_unsigned
 		   == inst.reloc.exp.X_unsigned))
 	break;
@@ -3275,8 +3275,8 @@ add_to_lit_pool (unsigned int nbytes)
 
 	     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))
+	  if (!(inst.reloc.exp.X_op == O_constant
+	        || inst.reloc.exp.X_op == O_big))
 	    {
 	      inst.error = _("invalid type for literal pool");
 	      return FAIL;
-- 
cgit v1.1