Here is the relevant macro. Both references to RD use the same
masking
#define IMULQir(IM, RD) (_REXQrr(0, RD), _Os_Mrm_sL
(0x69 ,_b11,_r8(RD),_r8(RD) ,IM ))
As Murphy's law goes, the only wrong ones were IMULQir and IMULQirr--
checked against as+objdump with the following assembly source code
(stuff after # is a comment):
movq %r10, %rdx #define MOVQrr(RS, RD) (_REXQrr(RS, RD)
testq %r10, %rdx #define TESTQrr(RS, RD) (_REXQrr(RS, RD)
cmpxchgq %r10, %rdx #define CMPXCHGQrr(RS, RD) (_REXQrr(RS, RD)
xaddq %r10, %rdx #define XADDQrr(RS, RD) (_REXQrr(RS, RD)
xchgq %r10, %rdx #define XCHGQrr(RS, RD) (_REXQrr(RS, RD)
imulq %r10, %rdx #define IMULQrr(RS, RD) (_REXQrr(RD, RS)
imulq $10, %r10, %rdx #define IMULQirr(IM,RS,RD) (_REXQrr(RS, RD)
<<< WRONG!
cmovbq %r10, %rdx #define CMOVQrr(CC,RS,RD) (_REXQrr(RD, RS)
bsfq %r10, %rdx #define BSFQrr(RS, RD) (_REXQrr(RD, RS)
bsrq %r10, %rdx #define BSRQrr(RS, RD) (_REXQrr(RD, RS)
movsbq %r10b, %rdx #define MOVSBQrr(RS, RD) (_REXQrr(RD, RS)
movzbq %r10b, %rdx #define MOVZBQrr(RS, RD) (_REXQrr(RD, RS)
movswq %r10w, %rdx #define MOVSWQrr(RS, RD) (_REXQrr(RD, RS)
movzwq %r10w, %rdx #define MOVZWQrr(RS, RD) (_REXQrr(RD, RS)
movslq %r10d, %rdx #define MOVSLQrr(RS, RD)
_m64only((_REXQrr(RD, RS)
Fix committed & pushed.
Paolo
_______________________________________________
Lightning mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/lightning