8929 // not using emit_arith because test
8930 // doesn't support sign-extension of
8931 // 8bit operands
8932 int encode = dst->encoding();
8933 if (encode == 0) {
8934 prefix(REX_W);
8935 emit_int8((unsigned char)0xA9);
8936 } else {
8937 encode = prefixq_and_encode(encode);
8938 emit_int8((unsigned char)0xF7);
8939 emit_int8((unsigned char)(0xC0 | encode));
8940 }
8941 emit_int32(imm32);
8942 }
8943
8944 void Assembler::testq(Register dst, Register src) {
8945 (void) prefixq_and_encode(dst->encoding(), src->encoding());
8946 emit_arith(0x85, 0xC0, dst, src);
8947 }
8948
8949 void Assembler::testq(Register dst, Address src) {
8950 InstructionMark im(this);
8951 prefixq(src, dst);
8952 emit_int8((unsigned char)0x85);
8953 emit_operand(dst, src);
8954 }
8955
8956 void Assembler::xaddq(Address dst, Register src) {
8957 InstructionMark im(this);
8958 prefixq(dst, src);
8959 emit_int8(0x0F);
8960 emit_int8((unsigned char)0xC1);
8961 emit_operand(src, dst);
8962 }
8963
8964 void Assembler::xchgq(Register dst, Address src) {
8965 InstructionMark im(this);
8966 prefixq(src, dst);
8967 emit_int8((unsigned char)0x87);
8968 emit_operand(dst, src);
8969 }
|
8929 // not using emit_arith because test
8930 // doesn't support sign-extension of
8931 // 8bit operands
8932 int encode = dst->encoding();
8933 if (encode == 0) {
8934 prefix(REX_W);
8935 emit_int8((unsigned char)0xA9);
8936 } else {
8937 encode = prefixq_and_encode(encode);
8938 emit_int8((unsigned char)0xF7);
8939 emit_int8((unsigned char)(0xC0 | encode));
8940 }
8941 emit_int32(imm32);
8942 }
8943
8944 void Assembler::testq(Register dst, Register src) {
8945 (void) prefixq_and_encode(dst->encoding(), src->encoding());
8946 emit_arith(0x85, 0xC0, dst, src);
8947 }
8948
8949 void Assembler::testq(Register dst, Address src) {
8950 InstructionMark im(this);
8951 prefixq(src, dst);
8952 emit_int8((unsigned char)0x85);
8953 emit_operand(dst, src);
8954 }
8955
8956 void Assembler::xaddq(Address dst, Register src) {
8957 InstructionMark im(this);
8958 prefixq(dst, src);
8959 emit_int8(0x0F);
8960 emit_int8((unsigned char)0xC1);
8961 emit_operand(src, dst);
8962 }
8963
8964 void Assembler::xchgq(Register dst, Address src) {
8965 InstructionMark im(this);
8966 prefixq(src, dst);
8967 emit_int8((unsigned char)0x87);
8968 emit_operand(dst, src);
8969 }
|