package x64 // regReg encodes an operation using 2 registers. func regReg(code []byte, reg byte, rm byte, opCodes ...byte) []byte { w := byte(1) // Indicates a 64-bit register. r := byte(0) // Extension to the "reg" field in ModRM. x := byte(0) // Extension to the SIB index field. b := byte(0) // Extension to the "rm" field in ModRM or the SIB base (r8 up to r15 use this). mod := byte(0b11) // Direct addressing mode, no register offsets. if reg > 0b111 { r = 1 reg &= 0b111 } if rm > 0b111 { b = 1 rm &= 0b111 } rex := REX(w, r, x, b) modRM := ModRM(mod, reg, rm) code = append(code, rex) code = append(code, opCodes...) code = append(code, modRM) return code }