@@ -1254,6 +1254,38 @@ class X86Assembler {
1254
1254
EMIT (" syscall" );
1255
1255
}
1256
1256
1257
+ // SHL - Shift Logical/Unsigned Left
1258
+ void asm_shl_r64_cl (X64Reg r64) {
1259
+ X86Reg r32 = X86Reg (r64 & 7 );
1260
+ m_code.push_back (m_al, rex (1 , 0 , 0 , r64 >> 3 ));
1261
+ m_code.push_back (m_al, 0xD3 );
1262
+ modrm_sib_disp (m_code, m_al, X86Reg::esp, &r32, nullptr , 1 , 0 , false );
1263
+ EMIT (" shl " + r2s (r64) + " , cl" );
1264
+ }
1265
+
1266
+ // SHL - Shift Logical/Unsigned Left
1267
+ void asm_shl_r32_cl (X86Reg r32) {
1268
+ m_code.push_back (m_al, 0xD3 );
1269
+ modrm_sib_disp (m_code, m_al, X86Reg::esp, &r32, nullptr , 1 , 0 , false );
1270
+ EMIT (" shl " + r2s (r32) + " , cl" );
1271
+ }
1272
+
1273
+ // SAR - Shift Arithmetic/Signed Right
1274
+ void asm_sar_r64_cl (X64Reg r64) {
1275
+ X86Reg r32 = X86Reg (r64 & 7 );
1276
+ m_code.push_back (m_al, rex (1 , 0 , 0 , r64 >> 3 ));
1277
+ m_code.push_back (m_al, 0xD3 );
1278
+ modrm_sib_disp (m_code, m_al, X86Reg::edi, &r32, nullptr , 1 , 0 , false );
1279
+ EMIT (" sar " + r2s (r64) + " , cl" );
1280
+ }
1281
+
1282
+ // SAR - Shift Arithmetic/Signed Right
1283
+ void asm_sar_r32_cl (X86Reg r32) {
1284
+ m_code.push_back (m_al, 0xD3 );
1285
+ modrm_sib_disp (m_code, m_al, X86Reg::edi, &r32, nullptr , 1 , 0 , false );
1286
+ EMIT (" sar " + r2s (r32) + " , cl" );
1287
+ }
1288
+
1257
1289
void asm_fld_m32 (X86Reg *base, X86Reg *index,
1258
1290
uint8_t scale, int32_t disp) {
1259
1291
m_code.push_back (m_al, 0xd9 );
0 commit comments