X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=include%2Fopcode%2Fspu.h;h=d8505ef6da35ae46f908a73554d7d5ef2270cc86;hb=9e790a80160676e7fd3fb8be6cf3c1c77d9ded81;hp=d0f11ca1550923a57c9cf36259fe227f941f02c2;hpb=827041555ac443bd57340060f3e034fd7b199dd8;p=deliverable%2Fbinutils-gdb.git diff --git a/include/opcode/spu.h b/include/opcode/spu.h index d0f11ca155..d8505ef6da 100644 --- a/include/opcode/spu.h +++ b/include/opcode/spu.h @@ -1,6 +1,6 @@ /* SPU ELF support for BFD. - Copyright (C) 2006-2019 Free Software Foundation, Inc. + Copyright (C) 2006-2020 Free Software Foundation, Inc. This file is part of GDB, GAS, and the GNU binutils. @@ -87,39 +87,42 @@ struct spu_opcode int arg[5]; }; -#define SIGNED_EXTRACT(insn,size,pos) (((int)((insn) << (32-size-pos))) >> (32-size)) -#define UNSIGNED_EXTRACT(insn,size,pos) (((insn) >> pos) & ((1 << size)-1)) +#define UNSIGNED_EXTRACT(insn, size, pos) \ + (((insn) >> (pos)) & ((1u << (size)) - 1)) +#define SIGNED_EXTRACT(insn, size, pos) \ + (((int) UNSIGNED_EXTRACT(insn, size, pos) \ + ^ (1 << ((size) - 1))) - (1 << ((size) - 1))) #define DECODE_INSN_RT(insn) (insn & 0x7f) #define DECODE_INSN_RA(insn) ((insn >> 7) & 0x7f) #define DECODE_INSN_RB(insn) ((insn >> 14) & 0x7f) #define DECODE_INSN_RC(insn) ((insn >> 21) & 0x7f) -#define DECODE_INSN_I10(insn) SIGNED_EXTRACT(insn,10,14) -#define DECODE_INSN_U10(insn) UNSIGNED_EXTRACT(insn,10,14) +#define DECODE_INSN_I10(insn) SIGNED_EXTRACT (insn, 10, 14) +#define DECODE_INSN_U10(insn) UNSIGNED_EXTRACT (insn, 10, 14) /* For branching, immediate loads, hbr and lqa/stqa. */ -#define DECODE_INSN_I16(insn) SIGNED_EXTRACT(insn,16,7) -#define DECODE_INSN_U16(insn) UNSIGNED_EXTRACT(insn,16,7) +#define DECODE_INSN_I16(insn) SIGNED_EXTRACT (insn, 16, 7) +#define DECODE_INSN_U16(insn) UNSIGNED_EXTRACT (insn, 16, 7) /* for stop */ -#define DECODE_INSN_U14(insn) UNSIGNED_EXTRACT(insn,14,0) +#define DECODE_INSN_U14(insn) UNSIGNED_EXTRACT (insn, 14, 0) /* For ila */ -#define DECODE_INSN_I18(insn) SIGNED_EXTRACT(insn,18,7) -#define DECODE_INSN_U18(insn) UNSIGNED_EXTRACT(insn,18,7) +#define DECODE_INSN_I18(insn) SIGNED_EXTRACT (insn, 18, 7) +#define DECODE_INSN_U18(insn) UNSIGNED_EXTRACT (insn, 18, 7) /* For rotate and shift and generate control mask */ -#define DECODE_INSN_I7(insn) SIGNED_EXTRACT(insn,7,14) -#define DECODE_INSN_U7(insn) UNSIGNED_EXTRACT(insn,7,14) +#define DECODE_INSN_I7(insn) SIGNED_EXTRACT (insn, 7, 14) +#define DECODE_INSN_U7(insn) UNSIGNED_EXTRACT (insn, 7, 14) /* For float <-> int conversion */ -#define DECODE_INSN_I8(insn) SIGNED_EXTRACT(insn,8,14) -#define DECODE_INSN_U8(insn) UNSIGNED_EXTRACT(insn,8,14) +#define DECODE_INSN_I8(insn) SIGNED_EXTRACT (insn, 8, 14) +#define DECODE_INSN_U8(insn) UNSIGNED_EXTRACT (insn, 8, 14) /* For hbr */ -#define DECODE_INSN_I9a(insn) ((SIGNED_EXTRACT(insn,2,23) << 7) | UNSIGNED_EXTRACT(insn,7,0)) -#define DECODE_INSN_I9b(insn) ((SIGNED_EXTRACT(insn,2,14) << 7) | UNSIGNED_EXTRACT(insn,7,0)) -#define DECODE_INSN_U9a(insn) ((UNSIGNED_EXTRACT(insn,2,23) << 7) | UNSIGNED_EXTRACT(insn,7,0)) -#define DECODE_INSN_U9b(insn) ((UNSIGNED_EXTRACT(insn,2,14) << 7) | UNSIGNED_EXTRACT(insn,7,0)) +#define DECODE_INSN_I9a(insn) \ + ((SIGNED_EXTRACT (insn, 2, 23) * 128) | (int) UNSIGNED_EXTRACT (insn, 7, 0)) +#define DECODE_INSN_I9b(insn) \ + ((SIGNED_EXTRACT (insn, 2, 14) * 128) | (int) UNSIGNED_EXTRACT (insn, 7, 0))