@@ -1305,8 +1305,9 @@ mod tests {
13051305 /// Bytes 160-415: XMM0-XMM15 (16 regs × 16 bytes)
13061306 /// Bytes 416-511: Reserved
13071307 /// Bytes 512-575: XSAVE header (preserve XCOMP_BV at 520-527)
1308- fn dirty_xsave ( current_xsave : & [ u8 ] ) -> [ u32 ; 1024 ] {
1309- let mut xsave = [ 0u32 ; 1024 ] ;
1308+ #[ allow( clippy:: needless_range_loop) ]
1309+ fn dirty_xsave ( current_xsave : & [ u8 ] ) -> Vec < u32 > {
1310+ let mut xsave = vec ! [ 0u32 ; current_xsave. len( ) / 4 ] ;
13101311
13111312 // FCW (bytes 0-1) + FSW (bytes 2-3) - pack into xsave[0]
13121313 // FCW = 0x0F7F (different from default 0x037F), FSW = 0x1234
@@ -1328,28 +1329,36 @@ mod tests {
13281329 }
13291330
13301331 // ST0-ST7/MM0-MM7 (bytes 32-159, indices 8-39)
1331- for item in xsave . iter_mut ( ) . take ( 40 ) . skip ( 8 ) {
1332- * item = 0xCAFEBABE ;
1332+ for i in 8 .. 40 {
1333+ xsave [ i ] = 0xCAFEBABE ;
13331334 }
13341335 // XMM0-XMM15 (bytes 160-415, indices 40-103)
1335- for item in xsave. iter_mut ( ) . take ( 104 ) . skip ( 40 ) {
1336- * item = 0xDEADBEEF ;
1336+ for i in 40 ..104 {
1337+ xsave[ i] = 0xDEADBEEF ;
1338+ }
1339+
1340+ // Reserved area (bytes 416-511, indices 104-127) - dirty it
1341+ for i in 104 ..128 {
1342+ xsave[ i] = 0xABCDEF12 ;
13371343 }
13381344
13391345 // Preserve entire XSAVE header (bytes 512-575, indices 128-143) from current state
13401346 // This includes XSTATE_BV (512-519) and XCOMP_BV (520-527) which
13411347 // MSHV/WHP require to be set correctly for compacted format.
13421348 // Failure to do this will cause set_xsave to fail on MSHV.
1343- if current_xsave. len ( ) >= 576 {
1344- #[ allow( clippy:: needless_range_loop) ]
1345- for i in 128 ..144 {
1346- let byte_offset = i * 4 ;
1347- xsave[ i] = u32:: from_le_bytes (
1348- current_xsave[ byte_offset..byte_offset + 4 ]
1349- . try_into ( )
1350- . unwrap ( ) ,
1351- ) ;
1352- }
1349+ for i in 128 ..144 {
1350+ let byte_offset = i * 4 ;
1351+ xsave[ i] = u32:: from_le_bytes (
1352+ current_xsave[ byte_offset..byte_offset + 4 ]
1353+ . try_into ( )
1354+ . unwrap ( ) ,
1355+ ) ;
1356+ }
1357+
1358+ // Dirty extended state areas (bytes 576+, indices 144+)
1359+ // These include XSAVE areas for SSE, AVX, MPX, etc.
1360+ for i in 144 ..xsave. len ( ) {
1361+ xsave[ i] = 0x12345678 ;
13531362 }
13541363
13551364 xsave
0 commit comments