From cd613c1fccd8c3b7872bea76da6a048c41884d41 Mon Sep 17 00:00:00 2001 From: Jan Beulich Date: Tue, 8 Jun 2021 14:56:39 +0200 Subject: [PATCH] x86: minor improvements to optimize_disp() (part II) - Don't kind-of-open-code fits_in_unsigned_{word,long}(). - Fold two if()s both using fits_in_unsigned_long(). --- gas/ChangeLog | 5 +++++ gas/config/tc-i386.c | 12 +++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/gas/ChangeLog b/gas/ChangeLog index e2084f89cdb..5f19f8590cf 100644 --- a/gas/ChangeLog +++ b/gas/ChangeLog @@ -1,3 +1,8 @@ +2021-06-08 Jan Beulich + + * config/tc-i386.c (optimize_disp): Use fits_in_unsigned_word + and fits_in_unsigned_long. Combine if()s. + 2021-06-08 Jan Beulich * config/tc-i386.c (optimize_disp): Write back updated value. diff --git a/gas/config/tc-i386.c b/gas/config/tc-i386.c index 249f1c36678..17398ee987d 100644 --- a/gas/config/tc-i386.c +++ b/gas/config/tc-i386.c @@ -5893,7 +5893,7 @@ optimize_disp (void) } if (i.types[op].bitfield.disp16 - && (op_disp & ~(offsetT) 0xffff) == 0) + && fits_in_unsigned_word (op_disp)) { /* If this operand is at most 16 bits, convert to a signed 16 bit number and don't use 64bit @@ -5905,19 +5905,17 @@ optimize_disp (void) #ifdef BFD64 if (flag_code == CODE_64BIT) { - if (want_disp32 (current_templates->start) - && fits_in_unsigned_long (op_disp)) - i.types[op].bitfield.disp32 = 1; - /* Optimize 64-bit displacement to 32-bit for 64-bit BFD. */ - if (i.types[op].bitfield.disp32 - && (op_disp & ~(((offsetT) 2 << 31) - 1)) == 0) + if ((i.types[op].bitfield.disp32 + || want_disp32 (current_templates->start)) + && fits_in_unsigned_long (op_disp)) { /* If this operand is at most 32 bits, convert to a signed 32 bit number and don't use 64bit displacement. */ op_disp = (op_disp ^ ((offsetT) 1 << 31)) - ((addressT) 1 << 31); i.types[op].bitfield.disp64 = 0; + i.types[op].bitfield.disp32 = 1; } if (fits_in_signed_long (op_disp)) -- 2.30.2