• Russ Cox's avatar
    cmd/internal/obj/x86: take over i386 duty, clean up PINSRQ, CMPSD · 0bf79b2d
    Russ Cox authored
    Make cmd/internal/obj/x86 support 32-bit mode and use
    instead of cmd/internal/obj/i386. Delete cmd/internal/obj/i386.
    
    Clean up encoding of PINSRQ, CMPSD to use explicit third arg
    instead of jamming it into an unused slot of a different arg.
    
    Also fix bug in old6a, which declared the wrong grammar.
    The accepted (and encoded) arguments to CMPSD etc are mem,reg not reg,mem.
    Code that did try to use mem,reg before would be rejected by liblink,
    so only reg,reg ever worked, so existing code is not affected.
    After this change, code can use mem,reg successfully.
    
    The real bug here is that the encoding tables inverted the argument
    order, making the comparisons all backward from what they say on the page.
    It's too late to swap them, though: people have already written code that
    expects the inverted comparisons (like in package math, and likely externally).
    The best we can do is make the argument that should and can take a
    memory operand accept it.
    
    Bit-for-bit compatibility checked against tree without this CL.
    
    Change-Id: Ife5685bc98c95001f64407f35066b34b4dae11c1
    Reviewed-on: https://go-review.googlesource.com/6810Reviewed-by: 's avatarRob Pike <r@golang.org>
    0bf79b2d
lex.go 30.5 KB