- Timestamp:
- Jan 9, 2013 1:29:07 PM (12 years ago)
- svn:sync-xref-src-repo-rev:
- 83131
- Location:
- trunk/src/VBox/Runtime
- Files:
-
- 1 added
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Runtime/Makefile.kmk
r44030 r44260 182 182 common/asm/ASMAtomicCmpXchgU8.asm \ 183 183 common/asm/ASMMultU64ByU32DivByU32.asm \ 184 common/asm/ASMCpuId_Idx_ECX.asm \ 184 185 common/asm/ASMNopPause.asm 185 186 … … 189 190 RuntimeWin32ASM_SOURCES = \ 190 191 common/asm/ASMAtomicCmpXchgU8.asm \ 191 common/asm/ASMMultU64ByU32DivByU32.asm 192 common/asm/ASMMultU64ByU32DivByU32.asm \ 193 common/asm/ASMCpuId_Idx_ECX.asm 192 194 193 195 # -
trunk/src/VBox/Runtime/testcase/tstRTInlineAsm.cpp
r33207 r44260 210 210 iStd, s.uEAX, s.uEBX, s.uECX, s.uEDX, iStd <= cFunctions ? "" : "*"); 211 211 212 if (iStd == 0x04 || iStd == 0x0b || iStd == 0x0d || iStd > cFunctions) 213 continue; /* Leaf 04 and leaf 0d output depend on the initial value of ECX 214 * The same seems to apply to invalid standard functions */ 215 216 u32 = ASMCpuId_EAX(iStd); 217 CHECKVAL(u32, s.uEAX, "%x"); 218 u32 = ASMCpuId_EBX(iStd); 219 CHECKVAL(u32, s.uEBX, "%x"); 220 u32 = ASMCpuId_ECX(iStd); 221 CHECKVAL(u32, s.uECX, "%x"); 222 u32 = ASMCpuId_EDX(iStd); 223 CHECKVAL(u32, s.uEDX, "%x"); 224 225 uECX2 = s.uECX - 1; 226 uEDX2 = s.uEDX - 1; 227 ASMCpuId_ECX_EDX(iStd, &uECX2, &uEDX2); 228 CHECKVAL(uECX2, s.uECX, "%x"); 229 CHECKVAL(uEDX2, s.uEDX, "%x"); 212 /* Leaf 04 and leaf 0d output depend on the initial value of ECX 213 * The same seems to apply to invalid standard functions */ 214 if (iStd > cFunctions) 215 continue; 216 if (iStd != 0x04 && iStd != 0x0b && iStd != 0x0d) 217 { 218 u32 = ASMCpuId_EAX(iStd); 219 CHECKVAL(u32, s.uEAX, "%x"); 220 u32 = ASMCpuId_EBX(iStd); 221 CHECKVAL(u32, s.uEBX, "%x"); 222 u32 = ASMCpuId_ECX(iStd); 223 CHECKVAL(u32, s.uECX, "%x"); 224 u32 = ASMCpuId_EDX(iStd); 225 CHECKVAL(u32, s.uEDX, "%x"); 226 227 uECX2 = s.uECX - 1; 228 uEDX2 = s.uEDX - 1; 229 ASMCpuId_ECX_EDX(iStd, &uECX2, &uEDX2); 230 CHECKVAL(uECX2, s.uECX, "%x"); 231 CHECKVAL(uEDX2, s.uEDX, "%x"); 232 } 233 234 if (iStd == 0x04) 235 for (uint32_t uECX = 1; s.uEAX & 0x1f; uECX++) 236 { 237 ASMCpuId_Idx_ECX(iStd, uECX, &s.uEAX, &s.uEBX, &s.uECX, &s.uEDX); 238 RTTestIPrintf(RTTESTLVL_ALWAYS, " [%02x] %08x %08x %08x %08x\n", uECX, s.uEAX, s.uEBX, s.uECX, s.uEDX); 239 RTTESTI_CHECK_BREAK(uECX < 128); 240 } 241 else if (iStd == 0x0b) 242 for (uint32_t uECX = 1; (s.uEAX & 0x1f) && (s.uEBX & 0xffff); uECX++) 243 { 244 ASMCpuId_Idx_ECX(iStd, uECX, &s.uEAX, &s.uEBX, &s.uECX, &s.uEDX); 245 RTTestIPrintf(RTTESTLVL_ALWAYS, " [%02x] %08x %08x %08x %08x\n", uECX, s.uEAX, s.uEBX, s.uECX, s.uEDX); 246 RTTESTI_CHECK_BREAK(uECX < 128); 247 } 248 else if (iStd == 0x0d) 249 for (uint32_t uECX = 1; s.uEAX != 0 || s.uEBX != 0 || s.uECX != 0 || s.uEDX != 0; uECX++) 250 { 251 ASMCpuId_Idx_ECX(iStd, uECX, &s.uEAX, &s.uEBX, &s.uECX, &s.uEDX); 252 RTTestIPrintf(RTTESTLVL_ALWAYS, " [%02x] %08x %08x %08x %08x\n", uECX, s.uEAX, s.uEBX, s.uECX, s.uEDX); 253 RTTESTI_CHECK_BREAK(uECX < 128); 254 } 230 255 } 231 256 … … 1520 1545 tstASMCpuId(); 1521 1546 #endif 1547 #if 1 1522 1548 tstASMAtomicXchgU8(); 1523 1549 tstASMAtomicXchgU16(); … … 1550 1576 1551 1577 tstASMBench(); 1578 #endif 1552 1579 1553 1580 /*
Note:
See TracChangeset
for help on using the changeset viewer.