@@ -6,17 +6,22 @@ pub fn list() -> Vec<Inst> {
66 // Note that `p{extr,ins}r{w,b}` below operate on 32-bit registers but a
77 // smaller-width memory location. This means that disassembly in Capstone
88 // doesn't match `rm8`, for example. For now pretend both of these are
9- // `rm32` to get diassembly matching Capstone.
9+ // `rm32` to get disassembly matching Capstone.
1010 let r32m8 = rm32;
1111 let r32m16 = rm32;
1212
1313 vec ! [
1414 // Extract from a single XMM lane.
15- inst( "pextrb" , fmt( "A" , [ w( r32m8) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0x3A , 0x14 ] ) . r( ) . ib( ) , _64b | compat | sse41) ,
16- inst( "pextrw" , fmt( "A" , [ w( r32) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0xC5 ] ) . r( ) . ib( ) , _64b | compat | sse2) ,
17- inst( "pextrw" , fmt( "B" , [ w( r32m16) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0x3A , 0x15 ] ) . r( ) . ib( ) , _64b | compat | sse41) ,
18- inst( "pextrd" , fmt( "A" , [ w( rm32) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0x3A , 0x16 ] ) . r( ) . ib( ) , _64b | compat | sse41) ,
19- inst( "pextrq" , fmt( "A" , [ w( rm64) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0x3A , 0x16 ] ) . w( ) . r( ) . ib( ) , _64b | sse41) ,
15+ inst( "pextrb" , fmt( "A" , [ w( r32m8) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0x3A , 0x14 ] ) . r( ) . ib( ) , _64b | compat | sse41) . alt( avx, "vpextrb_a" ) ,
16+ inst( "pextrw" , fmt( "A" , [ w( r32) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0xC5 ] ) . r( ) . ib( ) , _64b | compat | sse2) . alt( avx, "vpextrw_a" ) ,
17+ inst( "pextrw" , fmt( "B" , [ w( r32m16) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0x3A , 0x15 ] ) . r( ) . ib( ) , _64b | compat | sse41) . alt( avx, "vpextrw_b" ) ,
18+ inst( "pextrd" , fmt( "A" , [ w( rm32) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0x3A , 0x16 ] ) . r( ) . ib( ) , _64b | compat | sse41) . alt( avx, "vpextrd_a" ) ,
19+ inst( "pextrq" , fmt( "A" , [ w( rm64) , r( xmm2) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0x3A , 0x16 ] ) . w( ) . r( ) . ib( ) , _64b | sse41) . alt( avx, "vpextrq_a" ) ,
20+ inst( "vpextrb" , fmt( "A" , [ w( r32m8) , r( xmm2) , r( imm8) ] ) , vex( L128 ) . _66( ) . _0f3a( ) . w0( ) . op( 0x14 ) . r( ) . ib( ) , _64b | compat | avx) ,
21+ inst( "vpextrw" , fmt( "A" , [ w( r32) , r( xmm2) , r( imm8) ] ) , vex( L128 ) . _66( ) . _0f( ) . w0( ) . op( 0xC5 ) . r( ) . ib( ) , _64b | compat | avx) ,
22+ inst( "vpextrw" , fmt( "B" , [ w( r32m16) , r( xmm2) , r( imm8) ] ) , vex( L128 ) . _66( ) . _0f3a( ) . w0( ) . op( 0x15 ) . r( ) . ib( ) , _64b | compat | avx) ,
23+ inst( "vpextrd" , fmt( "A" , [ w( rm32) , r( xmm2) , r( imm8) ] ) , vex( L128 ) . _66( ) . _0f3a( ) . w0( ) . op( 0x16 ) . r( ) . ib( ) , _64b | compat | avx) ,
24+ inst( "vpextrq" , fmt( "A" , [ w( rm64) , r( xmm2) , r( imm8) ] ) , vex( L128 ) . _66( ) . _0f3a( ) . w1( ) . op( 0x16 ) . r( ) . ib( ) , _64b | compat | avx) ,
2025
2126 // Insert into a single XMM lane.
2227 inst( "pinsrb" , fmt( "A" , [ rw( xmm1) , r( r32m8) , r( imm8) ] ) , rex( [ 0x66 , 0x0F , 0x3A , 0x20 ] ) . r( ) . ib( ) , _64b | compat | sse41) ,
0 commit comments