The attachment contains a test of the RDRAND instruction. Per Intel CF=1 indicates that the return data is valid, and if it is not valid your code should loop and retry execution. In my simple tests CF was always set. Typical results running on my Core-i3 G3220:
...
E13493D5 25897119 B1FC4246 28F33D9D 0A6BB836
DB604872 AC5A2973 CC171DAA 266F3187 29300CEA
10000000
298 cycles
Hi
It crash under win7
00401000 > 0FC7 ??? ; Unknown command
00401002 F0:73 FB LOCK JNB SHORT test.<ModuleEntryPoint> ; LOCK prefix is not allowed
00401005 50 PUSH EAX ; kernel32.BaseThreadInitThunk
00401006 68 00804000 PUSH test.00408000 ; ASCII "%08X",TAB
0040100B FF15 38704000 CALL DWORD PTR DS:[<&msvcrt.printf>] ; msvcrt.printf
Here is a other solution rdrand64 and rdrand32
https://github.com/dmh2000/rdrand/blob/master/w/rdrand64.asm
Michael,
runs fine under Windows 7-64, SP 1. Here is the output of test.exe:
989CF2C6 EFB599D7 3B48CB12 F8F405A2 EC6E60A5
5C20D074 51CAFEED AC4DF158 607AD378 ED067F7E
7B8A3CD9 33F3C726 D11E965F A8F1D0F1 98D4B2CB
BA40E6AB 59F2E881 6D910F32 5BA9B1E0 3B12EA04
40CB65FA 953B2F3B 74BA717B 457F616F 2FFEC68B
4E72B22D 539AF9B0 E1037251 8AA0F29B A976AC82
71A4A5D0 4673F0E6 325935E9 83C8260F E7D045FC
8220374E DCEDFDCB 5BBC9B35 B4ED24F5 2BB11EAC
69BEA840 5868B439 4E182C1F 7DCD2AF1 BD81A5F8
F10BAED2 B53B8176 F8FCF1D3 A71800B5 6F9B2C33
BA9B8505 74635C23 6EDCA678 4F0EE51D 627F1887
5BA020AC 5D1F5354 1E97640C 45E0A7DE 24DE935A
B7CB2CB3 691BD410 EC1DCF3A F6540032 B158EA89
EF9BF71D 7C0837D8 128EC011 30656288 B8DC0F59
D28EC9AC 0E5D99E1 EC7B65B8 7954B72B CC7491C8
F687E7E9 6619BBCD 0A0DCDDC 76709E58 8D63133B
5B17B18E 86272262 25F6B95D B73D561C 2D1249CC
9CC4834F FFA2D71D 537942AD B428B202 BA0CB773
7D7F0D40 AD540F39 F4D9648D 9DE23D5B BE30AA5D
097BF710 8B9FAEE5 35F60E6B CEA37DBE E94D2AFB
24548CA4 8C85DE19 28357575 40B0F3E1 88AB0BD3
BB93F6EF C2C585F3 7889D315 19613C7A FA17C3FC
7D061139 9539AEE5 8477DE68 FA364C25 10367A4D
99609B84 557DC0D7 03DE6CEE F5FE3F9F 7CB8D953
8B1DEE7B 0C49B841 CD79D030 BC6DE05E 985D4C7E
0712901E 9C36CCB4 C8EF3935 81A9AE62 AFBC0877
4ADF47EF C034F7F8 D16F2ADB 7E158650 87F49F64
1EF11CB7 3D1FEB7D BCA1134E 465B9C6F AF97D44C
3FA0228B 088C002F 7D3D2D79 D8E26666 F37ECB66
C3AF8D56 B840C041 7D621723 AF93DD41 8F9975AB
A6C7689A 1F9923A1 364CAF6C 33E906CB 7B2C9A94
C83E0939 16C8F152 30D0D12A 19295FA6 7AE03A02
E064823D 6420AA60 11913F85 FBAEE73B D25632D6
0E3737B4 DDE473A8 9982D382 47106383 B2C161AE
5EB22702 1710D7A3 74E3071A 650B5566 96D7BB56
2C0AB332 F1B3FCD7 14CA0091 5B679DBD F9051E89
DAF9A36C F2D9FBAF 6DD5DB89 E3256848 A89B397F
F69BF97A 78A84896 2C68D1E8 156A0ED6 66DA62B8
1E31FA88 0E09F5A8 4B0644B2 5636594D 2F2276B1
528C2D2B CD16933A B17F6BCA B6FCA352 8F8860D8
4BCDEDCE 9C0AA914 6D4CA47A A502E02E AC2CB2E7
2AFB8237 428696BA A8D25EC1 63B20C20 279F4C2B
1A1AAFDE B0BD3C4D 5BA29689 09C3D5DD 54EBA16B
27541363 FB4A1047 16E12723 2B9D86AD 7ED2807A
EAC1FFD6 774DBC3E 0A2315E8 D0B6076F 9D660CB5
CC825BAA 5D5306C7 D4E9610D D27AE8D5 3EE94C26
EABB4EE0 FFD25C2E 11D5110F 79F6941D 68768763
0B717F34 D86C594D 29E281A9 BFBC3B41 0B652E44
04AACDB6 808D64BD 597D5552 49B480C6 2C7240F2
9B18CE39 7A417F13 617E42F4 F52C2183 B16FD741
E76D0B4B 199F2895 806DD8EB D0B2ABC3 FD90173A
820148BB F56311F7 D62EB93A 9B04B2D8 27FBACBC
85C3DA29 5A3D1B5C CADD662E 846F0C12 18F84495
7A817CF4 A345846A 01C103BD 8194CEA2 32E209C4
643AB10E 12B621AE 475410AE BC87D950 5905A4A0
FD976A82 A747F28E 565F3EBA E5EBE6BF 76F01F81
AC458A23 91C1E0C1 783B1E30 B31FA475 63A65952
AD7EF630 DD28B5FC 7610C5AE 234E6432 05098D61
3036AD02 88BAADA0 90627B74 B8DEEB78 97C378B4
5CE99B43 12EA010F 82D7E03C 967C1F51 287A26FD
8EBAAD60 D118465A 165788DE 4210DC40 A0A9E1D4
6ED3BAA3 367DB45D 6CEBDB5A 702104CD 347829B8
7BBE0C51 55198457 06DE86B1 DE088761 3F9D36B4
1D2F6370 221C850E 19A334DD 11E8BD0C 713051E6
28572597 53099EB2 6F4B6C9C A38B7FCA CC23EA75
98E177B9 ADF07723 D0DD0239 FCCFEEA6 F2D50686
6B944DCF 5EEDB230 E6E982D5 BCC94FF7 72F3CB86
995885E7 33FAFDEB 0BAB5AF3 7BA4619E 2A63B779
6F4CD2A4 38E5CF2E 717D4632 0D39D117 C418959B
29F5A4FC 61228628 A0479764 5FB71155 C52F98D7
7BF4E03B 7F3CD7A7 653C5E15 9F37F4F8 0529E4EB
18F1D360 A1568B47 373552C7 D507F755 66D9D6A9
36E925AF 964465EE 47A9B9E2 57B9A31B ED0F187D
94A5DBA7 7E8DBF73 B0AC2C99 13D9939E 5AEFDBB1
49BE45E3 4F0F0EA7 652D2983 25DA6F20 60D8ECDB
2C125EC5 6BAB2409 31816DA6 B053B9D9 A9A00F6C
4325B95A 5DBB47D2 3B8603E8 4785DB25 998AA27F
C1BD33F7 92DBD036 785E4CAE 2B67355A EDE9E73A
4232B7E3 54BE8B72 C38AC209 4F300F8A 767918E6
156C30E7 AFA7A9C6 23A0031D D7C529F8 B22194A3
89188E89 23D6CC39 9154EC72 9CDCD4E3 6AC9F4E0
35BE3A64 5EE36FB8 CE71E1B7 A7889011 511FE079
B270B83D 907C0676 DCF863AF CE1BAB16 7AECBA54
09530DC0 26160523 0E6D14C1 68C149EC 5DE9E01A
5DAA5E31 357DD412 601022C4 310C2D95 18F6A7BB
B568773F D0CE0682 FABA485E 3F643510 3B16A622
FDC3849D 83283CD8 148A06FB E5708B5A B74DB3CA
02012B59 2FB6615B DFF317F1 9E158084 327BC8DA
DA3C753C 6274B154 77367DA4 300C989A 11038F85
8E8CDD59 C1747BE2 DF91CF6B D483F81C 416ACF25
83AB51B6 E328B055 19148882 755E5365 DAD5D083
30EA0699 AFBB63B6 E6F5E498 3CEDF3D3 A676CBB4
E13FB876 4A41F9D6 42534462 A4CD3BD5 687FE280
9273199B CE22E669 1C69F282 1D62289B E1216D41
27034A94 7396954C 9126B651 1FA005C9 76798A49
C881612E AABDA0F1 3465F39D 21AED80F EBF958A2
2821ABD6 90F61A33 302C44CC 3229B469 E477DCED
7E916BFB 18E258C7 6FAA389F 0CCCF15A 163F924E
EB04F92E 1DB7CB11 C36E9CB0 0ACEF12B 67910D0B
334B7FAB 5466B460 3B146A62 5E95B07F 7D5DD866
1BB567A6 0B19F071 FC17E035 0D671D18 7340FEBF
7BF14EDA 778FC6FF 553EA939 A781021B 36F83AAF
1D203E4A 6DBAF279 84334299 158B3EC6 5E32A35A
5F694370 EF6F5204 0E478214 16A0AC7E A87705D1
B83AB47C 8FA15FD2 7FEF6466 3A3130FE 6A28DFB0
733ECC58 373D434B A2A181A6 151A1AFC 1CE526F1
251A6B7D 12CC91F5 0DC56960 14B64658 5C8C4107
92D31BC0 0EA10E64 B17579FC F998BFE4 740C5CE2
A0D56336 8D610864 B9580F12 F5D0BDD8 BE8F3EE7
DE4B4AA7 72B0A8DC 108B20A8 EC9CFCD1 6E65C6B7
18975522 DC7DBC24 33366F82 F2FCA22F 20302DF0
C439526D 6CE7E3D0 BDA6AC2A B1816E99 DCFD9130
52872BE3 AC9A3134 3861CC6D 99F1C612 E5904F9C
606C5169 B1AF7986 8B318F3B 22E402B4 0BA9F6BA
2A43309D 7D2DB8F0 B2925A61 3658E824 E25607D3
755808EB 55877926 E837CED7 FF67715C 1F3F0094
3D4AA20A 53A3B89D 2B14F2D6 303E7E30 D520B0E3
1109671F 0AC46976 4637CDC5 89F11A96 B3BDAFA6
ECD61F0F 76D13B4D B7E2341D 4BA50B07 F10A991D
AE49C6D5 8B47543F EFD3D63F AB526FC0 49DDE398
43E7DB8F 79A8B6EB E31542E9 0C86C363 80BBA8A0
30656EF4 5B7D6983 A204A1FB 4098876B E70EA33F
A3D1003B 68436FEE 2E343B2A 4F3E96DC 75618B1E
6DA16377 3C9DFCCD B2731099 72BB39CE 74E80511
7B97E5FA BFD8ED68 63491700 DE3E137E 2C628A51
F8981877 857CC052 E5885275 55B58862 C7277417
9435C235 D55924E7 C483D98A 6023126A EB016D25
620651DA EC7D54E1 E8F2CE72 F6B709A3 95C181DC
65F8FA99 2A491A53 FF8B4002 9E27061B 6CCDF92E
48040D16 1BFEA00A 68089905 852292A1 3DBFAE2C
CEE2F949 6CF8B8B0 4D5E9F8D 52474D8B 3043C48A
0E41400B 9E66AA80 127B9A0A 7A5CB8B3 35275891
A74425DE 04EB4666 8664CE30 7CF87079 7910ED11
A260C3B2 F715535D F6F65F75 6D8BF3ED 91756013
97DD32A0 C055654B 669DEA24 F5C6C233 CBB5A6E4
6A59791B 29BC5F1E E0815582 A2B0FBC5 D1A62AFB
319958D0 C396ECE3 D6AD839D 229933F1 FCB87D9F
12810FEC 174AD7DD 83026C86 B8302216 0EB036D1
804B946A 23FC5D4B BB1147FD 2E3AC9AF 561CB8CA
3E8E7551 64FE6C68 51A3EE1C 5EDE2478 ED3854E5
8C4C0D18 C4BA7FA9 EFB4495E 2E14A390 59C1FC53
F54AF158 1F1C2C49 EB413C81 2F550A93 97826575
F33458A6 E346EEAE D5C8B6DB 865A62AF 670E5EF9
4716771D B9817DD4 CF2E85CB 802AE9DB DDDDC65A
FF4166EC EE5F46C6 B75A6B75 73DE153E F427A21B
7459D2BD B7C2DF92 89375024 CFA3A080 E56F8011
C98045AD 4FD9DC6B 528C68A9 62E6400B 578CC252
8642685C 6B15B5FB F4920C88 B38A2380 B5285FA2
D77BC238 7DAD82CE 8EF710A7 966FA6D3 63C06640
B62CC3AC DFD88240 24BE1E35 D7B09946 2ADEB74A
C59E0C55 3BE68828 9F10C3B3 1904F5ED 344C6B89
FC760898 1CFCA30E 0D5490B0 16ED2C7C 48332CBA
D343968F 0C4E7223 260EFAEB 4FAD2C7A 809643B0
70872F26 15A751A4 713E2050 F4F36754 4AC07434
87567016 33234698 EC569ED4 A968CF98 93741173
5A636601 018F3B79 2E03BF80 C6A7BB71 6129E28E
548E0BB6 84F14025 077EA703 5212EB3C 53EAF0E9
3ED5A9D4 244AC1EE 67F496FF 3E99B529 EC07A071
0B256892 A1E65956 40475363 F8DF0BC7 95215486
5F1A82C8 74CEC3F1 3990DDE0 2DCE8C51 9C3C481A
9AFE5805 291E25E9 C7CC55FA 9433B9C6 EAFD4205
CE74F6D6 281F4586 30AC7FFC 75B8752D CA532CA1
A1989EB5 5043720E E36D6AA9 46FC5A2C 4E07D205
4EE49E89 C5FDA2E5 D8F550DE 7A00327F 2A6722A8
C919A6F1 FCAD3879 95DC0258 CBCEDA2E 2DA3F6E7
4EBCA70B 100A9733 809EF85D 77D8B80B 171126AD
E7B01EFF EF4F290E 8F97011D 935F5D1E 1DC6169A
19B8CBE9 A34AFAC4 CC73A347 85F66799 92B7AFC3
BD505325 452A363D BA8FF2B7 F10CC931 DEDD0528
D7F35D69 22E4FD02 EF090F5B 1EE9BB1F 22FAE930
31374C6A DD8F1A31 F4087352 818DA3CF 2BE95E1D
8CAE2B9E 7C321D7E 08320EBE CBC825BD 0BDBA4C3
9CC50E5B 0ECD5CB1 F18DFF5A 7999F6EE 04C78577
BCDC2D4D C3D4709C 62866A79 5721DDB6 E57E0DAE
BD7F2F4C 85CABE54 8D6751B6 FEF202CE 443C27C4
39DC7897 8D82A1EE 9C25C470 E91FE84E 348F0257
5D221EB5 86D24CB7 527E48A7 6A7AA768 123ED948
98E743A0 D7604864 CD34B593 66C390A5 D3FC551C
AFC38826 99139906 EF66B456 4CCFC9F3 795B2DE3
F716CC89 A24FFE01 11BA9F36 10132975 35747EF6
7B38D146 A2FD18D0 420B5860 E4A1176C 4DA7E424
CDE4F130 10136986 A2739D60 C989886F FF22B51B
10A2C50A 61A7ACC1 8178817F 3F473104 00A8A984
7B720D58 6D9BEB3F 04DAE3A6 9B73D2DF 1257DF98
358DAFAD 3B996815 6E1943A9 F94E9C4F 9C503E9A
6BB55FDA 85409F95 88025710 47986143 7519AE21
0F5BC584 7F634547 1B3848A2 6E6C4E91 138B4317
EF254455 451FF401 0D57C3B9 845A758D B9A11681
854BE0E0 3FF8E5ED E4572299 D5EBE30D B88E1DCA
ACDDE9B3 99A0443D FC4ED693 7EC08400 207963BE
987C3D21 A7E0474E E8AF53BA CB0CEF87 C905583F
D3D31D99 A895FF40 246C2A72 D05B3280 88439D59
F4D2D96A 05156226 F4CDB2A1 8B493995 1EF4203B
14F56752 0AC92891 AD3D1C1F 25301963 76A5A00B
DA996F3F AB311C8B A1034518 63E2653D 64C5E23C
60BFFC26 22AF49F8 BD986E43 912CC38F 069FD341
B23F5332 B792640E B8049955 5B450434 53458EFB
8D729389 48FE9760 A49858D1 8DC27736 4484FAEC
CE8910BC DE82F1A4 E28B2124 58A8CE28 8992C2A7
F3B2C98A 1DC494DC 22E76DBB 03B5C4B9 4E61C8E2
10000000
108 cycles
Press any key to continue ...
Here is the output of featecx.exe:
SSE3
PCLMULQDQ
DTES64
MONITOR
DS_CPL
VMX
SMX
EIST
TM2
SSSE3
CMPXCHG16B
XTPR_UPDATE_CONTROL
PDCM
PCID
SSE4_1
SSE4_2
X2APIC
POPCNT
TSC_DEADLINE
AESNI
XSAVE
OSXSAVE
AVX
F16C
RDRAND
Press any key to continue ...
Gunther
i7-4930K CPU @ 3.40GHz
win 8.1 x64
4E1704C3 C0459068 E52F09EC 388DBDA1 C9FD5143
216962F7 AE653F5E 5E484589 44682157 C7CC5D0D
4D6F23AF 71746930 79161515 D53990AC C0CD292B
1FFB2E79 12B83385 E98BA768 147FB398 397AD05E
87441700 EF51249D 7AF8CC7E AEFFED35 A5DE3CF6
5B79A2D4 38781DB3 AAF8A2AA 7D51F3DB 2C667EAF
C90F716F EE5F6F41 4DFB8303 107C5FA0 3A8A049F
A4B2C20D CFBC851C FB139261 CC7490E6 71E8EEDD
9649AA6E D127C47F 196DCD8A 151FB6D2 2A18675D
F1042954 A316FF99 9B831440 FFEAD502 67BEBCEB
E1335177 326226F6 E781C7FB 735F8873 2169E533
57D5DCCD 8036E686 C9BC496C 53A06ABC 9E2B2331
412411CA A763846A 76E484A3 609C227B F4712069
1BF2EA49 CDF27951 456E9E1D 3691EADF 70DF3E33
56A39035 9EC296C6 B29785F2 6DDBDA87 5F12F0C5
1EA4ADB7 E955FC28 F062D933 09B11345 9F1A7001
C1C7212D E698360A EF125DFF 255EA00A B75FDB26
A26DF9A2 A7D2B58A 3E0D09CA 92F6D555 17619585
9D094161 6B3E9CFF 15272067 F99181A0 200C56A3
3D19FFE2 C955E74C E7FE64F5 5B4660A0 A7B6DCAF
9A13180E 45A599BE 6E72B6D0 1DDC0D05 2D293E09
CBA0D60A F89B199B C355773C A30E7B33 A42B6462
3ED3D9DE 71D2F436 F6598D38 068ACFCA 729E3403
D6556340 26AE1D60 2B1239FF 059FE6CE EA165755
6AF96024 8FF0FDAC 3B34D846 C5B519F6 EE0E7DA8
D666192D EF08B5F8 2A771E43 536635FA 273830A6
3DCFF8FB CDBDDD70 17EE3CD8 66F8710B 4A1CD033
DEEB557C BC1C5DC4 B72F08A8 20B488A2 7BAF2442
80312BA7 6FACD404 07B42725 272AF51E 54968928
F27AA6AD 29FD779F E64D2233 E4A2FE76 C3DD4CB7
72F06CB0 63360F58 71F8F5AC 52EEFF3F 5AF4C9BF
8FA201E0 A75C4B39 319CEA16 CAC45B32 5FE9721D
839D454C DE572859 45FAC205 6C3DBBEF E2BF119F
BABB6244 DDD058AB CA277C0F C4763756 05E47E4B
91220F27 85693585 2A012FA4 D2CDA32F F1AF6E6D
BDFFEF8C D908D0F6 7DEE0F99 979446E4 106A8F52
766748DD A3C040B7 ACF7AF9D 179CD68F 39F7B124
0C5B5DBE BD10DC8B 3C50B7B4 3087E6FA D686E47F
2A758A27 9D9CA814 CA0206EA 1CAE69DE 3F58EDC3
C8BC5C0A 7BA22071 297F7379 D5447BE9 1467A3D9
4484018C E1EA9179 861E6469 87E4E5E4 E1F9D9D4
8328BEDD 6FA2BDFD 467B8B87 432FCE2A 6A2827A5
56FCFE1B 75B3FD1D A109C627 D1FA803E 26545F06
916BE07F 887A9242 8895EFF0 601DE735 5D94B0E0
00CDF7EF 9DF9E6A2 3A49936F AA243F37 6C41631F
372D0E4A CEC810B2 51ED6DC1 54519D8E 81CC52A8
C0A06F30 450A891D B4371AE8 D083BC3D 8523390E
0E80CD63 34F5AA2E 802DCA0E CDE0547E F6541936
125693C5 92136692 32A3347E 3B179ED0 11FC29BB
2CEE1D62 4C451A5C 5157F2CD 6D96666D 222E8DD3
807806D2 2FF585B2 1F6F9FBE C7B9DA49 BCFE9313
8087113B 6CF3EBFE 8C3390B0 29440D87 5DB1949F
1CEE12B5 9FB4FA1C A3FCA0D3 1DD4DB7D F4B370A1
16C0B1B6 C7F00930 0EAC051B 3C725E84 8DA805CB
09FABADE E31C2780 4A424A17 C8211FE5 A0324F7E
9425FEB0 615AEF04 FC735696 2885C292 96D9AB6E
84FBA559 094845C0 B38341FB 8D2311D7 D9E452B1
0DB4DE62 AD7A5E7F 16E6A9B0 6A632C3F 4FE0DCB5
EAE5B7B6 626C0EC8 CDCD68EE F6DF1D14 3123E16F
6908341F ED2C198A 5FA2CEDD 825207D9 C5561B4B
886BC592 9B25C125 9EA863CF E5845341 54BDF709
290488E3 6EB1253A EEC3790B A471FC30 6D03CBE3
62D592C7 62F9D81B E06DFB5E 8685054B 6402735F
0428B868 B5D3E1D3 C2161666 6774703A 978ED3D8
5DF52999 911280DE 57E4A77E 2719DAC7 1A054E5D
7C1B7938 961FE822 C7A24510 395A2845 E3177607
4C625FB4 9B3895CB DB3A915C C46906D8 5399A711
9761C820 2BECEC32 455C3975 39A0A205 25149B05
98AFEB32 093C2DA5 FBAEB347 DA93AB84 D2934FFA
CBA42841 9165AC9B 8C2E6EEA E9040E0E 1B2ECE9F
5054DAAA 2058A71E ABDCBC34 1E20EC60 C810984B
1397AE67 432437CD EB7F4DE0 F1AFC281 FFEB25F7
45E67125 14ADB0E7 5CA7427F 40F81D74 D8F90A0E
94B61F78 00689ADC 4B3FDE99 7DA0FB08 A0C4435C
D4FFA04B F65EEEAE 8A0757FB 3A5885E6 F83484E2
DE2ED654 7C437707 C08E4778 2627C732 26F94AD9
ABD1C230 3E6EDEA1 A650B482 390DAC32 4E538E09
13FA35B7 B999132C ADCA113D 23436E04 EA95A073
AEC58159 BFDD4C67 7854E6BD 5E512682 D8F6EB30
47ABC5A1 20594B1F 19246A48 92116803 D3D7E031
E1D2BF43 7EAFF875 D66D22A6 B4797A5F 18F5FC2B
A5D92D86 50BA1F2F E24A11D2 E5F28177 AD70A982
39ABAEB9 9C96AC85 0D835F44 17A11AE8 C3E6197A
35EF4B92 C2D47812 E7A46A6E 762FEC48 1ABAE42D
48E2A67A 9513ACA9 13895FA5 F28EA4AD 3D80F258
1A530BED E62597D0 EDADC7D2 A042F0D0 EF0CCE67
D901A9D9 7F716C35 9E462035 06B97B8C FCC459CE
1C841793 E8B528A1 06916B91 3B6093BE CAE22498
59E45673 783D2011 2170FDDD 41FD5A38 C4B8DDE1
F8A1674B 8088EB0A 052072EB 44781FA4 A9C39E70
302AD880 CBC4AAD7 C2C1F386 FA2F2744 44E50A9D
FC57F75E 08768789 EEAC4AFE ACCF3CB6 574840E9
C27DD6C9 E3A9DEDA 3BAEF461 9AC23D1E 0657D535
E7198186 A14BEBF9 3E5FF84D 36E09244 10F9558B
213DE15A 25C1C43A 6F32347A 825F6545 D2EF126C
ECAA4B7E 51B451B8 F2217C7E D86ACBBE 320B6E66
9E71FC53 D10F55A7 F785D464 33B0CAC7 A872260F
5E5E0A01 E1426F65 625174CF E2B35FFF 21702338
33FA7044 3166CE1B 31464F8E F4554B55 2CA50775
A15E5C3F 82A8AA8C 9F08B3FC B8F38114 B5CA1E8B
A37DB19D 711A787E DC82D915 1659F756 ABC0963E
42D6E9F2 34F126FD 32A5080E 079D4EBC 176A537A
C8C46877 424D0092 DA4C2281 81E2C87C A8BEF95C
4FF7C616 56821D11 16F9CC53 0C54CA3B C49E1121
54E6917A A178D302 53107101 955219D8 92F8C761
EDD18BCD 356A3E9D 3E7B629A A97F2F5D BFEF78BD
14D8025C 50E3563B A5F9F129 39D77EB0 499603B0
F25A39A2 B0B27F5D BDF1DB47 8BA2D42E 4370D622
D84E42A0 3FD2BBB1 AAAE0DF5 564EAE11 BDE9465C
4437D8DC 8FF027FB B1653529 E26C3886 7A6323F1
2AF08585 615BE040 36013152 59B4DABE 24B74B4C
1DAB8075 E0A08075 7A319030 1A03CC0A C3F75FF9
00A0BF84 13A88946 F8C01725 41837794 A72441B5
F994C206 09DD98CD 988F9476 0631A31C 497ACE54
7A3E205E FE172C8D A5196437 3DA47F56 DA976F84
41B347EA 7DBF17E6 44A83A20 E0F6A0C6 40055453
4DB95BC8 FC54F581 A43D2BE1 6B1D3347 6B24503B
48BEA6BE 8C2B0F7A F738EEE6 A84A9509 A0BDB49E
A9288323 994C6948 0E0E75C7 1D075E77 D447F712
808B2092 5F1E7FCC 8A7AFE45 7B0C20CA AD58D43A
2DE2D5B8 273CD872 97B53803 03CD3B22 4FC3E001
B92176B8 5EDF2B18 22979D1F 235A50A3 C7E9B7F8
24ABF6BE BE5B22F8 4AAD31DE 3324BBD9 A5FF52A6
C5FF8A8D BE56D3B2 F43BF912 F69B8455 50E867C0
0C84DE00 B1F7D402 D939CD71 71C4D995 72A79E53
70AFB6FC 0FF37307 C25E8A7F EBA47A4B 177F24E3
F9C643EB 14856F49 D8BAFF14 253E9F35 CC450556
FFEA6784 B6D4546C 3BCEDB79 5884329A 8DE21A06
E13977FF 2EA158E6 F3159132 9D89544B 3FC09093
79529CD1 0E29FC7A 2D16BCDC 7D834E82 3518D06D
9A7494C6 85AC47C3 3CB0463C 497E95AC 4F62BAD1
34DA59EC 0571A414 7D13C6A5 711558B9 173BFA57
3102AF91 92B4C143 ED384C2A 529D9C2D 97B9D226
274A4DD8 F4BDE22A 022AE28E 4BB96244 8BACA8CB
5D52B4FF 97AC0BD9 B50D6456 1C34468E 2B853588
EA4DA4D2 4531091D 1B161953 0427F565 B0BC6DE1
1611E243 DC29D569 E05E7420 B0A40452 1058F46E
33155626 2B874D1C EF56F688 CC2412F2 1FF61D42
71E22C4B 9EA5D844 D1740C61 5F1CD475 896A506E
61B411FC A5827369 9DF78B61 44E585CB E6FF4C8B
F9853133 DFC3F11C 429A02DF 01F67971 2B0D8BAC
3D825587 AFB7AA99 0F9ECDB7 A2895B65 BACCBE2A
1A627293 E7A35560 85B0356F 4C2BF391 2AE00F34
58F79641 E9AE9FC5 525008A2 CAD1D279 56EAAA7E
58260C36 6E046F77 1026F68A 8913B104 8D8D8F37
E675DDE6 16717C27 E68EE14B B3E3D775 EF372D39
D2B38F98 BA8031A2 E53476F8 437C7470 E2D8676F
94D094C2 743EE09A 8A496C5D 1354E428 57F152D6
C5AA32E1 9EB96BA1 4666995D D8134735 5709DC6A
8FF05DF5 8FE542CF E85C9723 593BE144 76EE81F8
3088B256 4ACB509E D770BB73 487DF05A 5A8EC1B9
22E8E03F F8C416B1 E0A7E8E3 FB2A4EE2 28DE04D1
53EAD643 571CDF09 F7BB9746 8D56E775 CD45EFC1
7D877F2E 31181280 48E1A197 48BD3740 71768830
CFBAD4E3 FC7BD5EA 176565FA 7C66E531 9283C359
753C6893 8F3DDAA3 818A6517 95D660E3 3CDCD8F8
C956F822 862DB045 382D90DB C00AAEB7 ED581DAF
7715FBE4 39A5AC41 86A1DDC1 2842CDD4 70768282
2A3A73E3 757C13D1 64474AE7 FE5348D2 30AD60FD
684783D8 0270B081 833F0CA6 8A8460C0 444F3C34
1791163B EBD28061 04662F46 FAA76BB5 CAF16124
0D1E717C 97643C9C A5AAFC7A A2297E86 2E8837FC
B92C76D7 09B08925 6951540E D76A2619 48BF9271
2F53E7D4 AB34949F BF48EECC DB203460 C4C9CC00
FC69D178 32AAF26C 79D4FEE6 6E41B51C 9F355E51
C13EF7CD 22AF26B8 AEDBC931 B9F18185 B4CD8B08
B21B3485 78BB82A6 D83C0D1C 7933D755 E8AE3F61
541A05F9 47AECB84 F6B37A9C F4A1888E BAA2251A
FE697DFF D88B23D0 AE8E5BCF 3CFE37B5 9E5859EC
7FA48648 994CE261 C25FA47B C5BAF897 5AACE7B9
9D367E17 EF2A09B9 28723448 7781366C AF409223
5A156397 284FD737 70ECC325 15E53A28 465D0851
F0D55CB6 21F413EE F4DC1A76 63E8530D D8C41A04
A010BE5D 370EC611 1B6F457C 08EB8849 2D018610
92B1908D 9D3809D4 DB8222B6 2CE07FB0 F5223752
1A4DE0D5 013457CD BD0FD465 CA9F33DB CC94C980
CC02D10C 9BC7E5CA 19D7358A E634A7D2 EDBC4E87
C9A79529 6867EFEA 12633EA2 5429988F 4BAE3A97
7209E54D DCBA68E4 7B16F73B C9615874 6A16F8AA
362219DB A95069F6 65AF1672 A04087CB 16F8D3DD
7AC89FC6 CDCA6E87 C55B130A 608D354E 87A246D4
9B28F483 C0C5CA2B 37611F5F BCA9BD38 494FB804
2A91F4DA 5052DE00 9627D291 71F20224 9681D4AE
E90CD5CF 49E6F120 079005F4 08BA0FA0 4BC4FB5C
0614C0CB 6C61F4D5 4FD5DD15 4AF03D7F 699AE7B0
53C385A7 3F6A1A1E AB4DB49A 774641BA 9CE66E63
3DB979F3 DD174999 9698AA80 9543D516 AE99ADB2
87A6C382 FCD7EB7D B0CA670B CDA8CE86 79A63378
42EA3DDB 0EE0F10A 8D959E2A 45E18D30 7F131950
39FBD91F 65AFFF49 2EA644CE EEA79FFE 2E50E348
DD72F009 A45BA4B2 DDDED7B0 4E461623 45BFB921
03E34AB2 983B94C0 150ED686 83986EF4 86EB6910
39F0D0B7 3C9BC2A2 2533CE33 DB31E2EE DAAC8C9C
5C4E0C3E 2902E540 4C26BABA 8C0B2A60 3DAE6C74
D3945728 71A40DB8 C18A4C68 1ABD36EF 7D9ED7E2
DF26511D 0E4F103A AB4311FD 57715D2E F51A0BA1
AF85B387 5E7092EA CF2D31E1 715EB4A8 A84461B4
650FA296 98A5731A D1870FBE DBA3957E B21D35E1
EB59AA65 8B85F5B5 06BF18A5 3E3CCF71 83A3EE17
208C8C14 F0D9446B 6AD58F39 704889D4 52AABA1D
10000000
310 cycles
Press any key to continue ...
SSE3
PCLMULQDQ
DTES64
MONITOR
DS_CPL
VMX
EIST
TM2
SSSE3
CMPXCHG16B
XTPR_UPDATE_CONTROL
PDCM
PCID
DCA
SSE4_1
SSE4_2
X2APIC
POPCNT
TSC_DEADLINE
AESNI
XSAVE
OSXSAVE
AVX
F16C
RDRAND
Press any key to continue ...
This version runs the carry flag test loop in two threads, each running on its own physical core (my i3 has two physical cores and no HTT).
;===============================================================================
; rdrand eax
; Syntax error: rdrand, JWasm v2.12pre, Nov 27 2013
; From Intel manual:
; RDRAND r32
; 0F C7 /6
; /6: F0 = EAX, F1 = ECX, F2 = EDX, F3 = EBX, ...
;===============================================================================
bin$ MACRO DDvalue
IFNDEF _rv_bin_string_
.data
_rv_bin_string_ db 36 dup(0)
.code
ENDIF
invoke crt__itoa, DDvalue, ADDR _rv_bin_string_, 2
EXITM <ADDR _rv_bin_string_>
ENDM
;===============================================================================
include \masm32\include\masm32rt.inc
.686
.xmm
include counter.asm
;===============================================================================
.data
pam dd 0
sam dd 0
param dd 0
.code
;===============================================================================
ThreadProc1 proc uses ebx esi lpParam:DWORD
xor ebx, ebx
xor esi, esi
.WHILE ebx < 100000000
@@:
inc esi
db 0fh,0c7h,0f0h
jnc @B
inc ebx
.ENDW
printf("%d\n\n",esi)
ret
ThreadProc1 endp
ThreadProc2 proc uses ebx esi lpParam:DWORD
xor ebx, ebx
xor esi, esi
.WHILE ebx < 100000000
@@:
inc esi
db 0fh,0c7h,0f0h
jnc @B
inc ebx
.ENDW
printf("%d\n\n",esi)
ret
ThreadProc2 endp
;===============================================================================
start:
;===============================================================================
invoke GetProcessAffinityMask, rv(GetCurrentProcess), ADDR pam, ADDR sam
printf("%s\n%s\n", bin$(pam), bin$(sam))
invoke CreateThread, NULL, 0, ThreadProc1, ADDR param, 0, NULL
invoke SetThreadAffinityMask, eax, 1
invoke CreateThread, NULL, 0, ThreadProc2, ADDR param, 0, NULL
invoke SetThreadAffinityMask, eax, 2
inkey cfm$("\n")
exit
end start
My results for every test I ran:
11
11
100000000
100000000
Any ideas on what sort of conditions could cause RDRAND to return invalid data?
_rv_bin_string_ db 36 dup(0)
being global, and potentially accessed by 2 threads at the same time could well be it....
Quote from: evlncrn8 on August 17, 2014, 06:09:00 AM
_rv_bin_string_ db 36 dup(0)
being global, and potentially accessed by 2 threads at the same time could well be it....
bin$ is invoked from the main thread only. Because the thread procedures display the value of ESI I initially used a higher loop count for the second thread so the display operations would not overlap, but as it turned out this was not necessary.
im not sure then, definitely one of those 'odd' issues though
Quote from: MichaelW on August 17, 2014, 05:10:33 AMAny ideas on what sort of conditions could cause RDRAND to return invalid data?
The manual says:
Quote from: IntelĀ® 64 and IA-32 Architectures Software Developer's Manual Volume 1: Basic Architecture: 7.3.17 Random Number Generator InstructionIn order for the hardware design to meet its security goals, the random number generator continuously tests itself
and the random data it is generating. Runtime failures in the random number generator circuitry or statistically
anomalous data occurring by chance will be detected by the self test hardware and flag the resulting data as being
bad. In such extremely rare cases, the RDRAND instruction will return no data instead of bad data.
Under heavy load, with multiple cores executing RDRAND in parallel, it is possible, though unlikely, for the demand
of random numbers by software processes/threads to exceed the rate at which the random number generator
hardware can supply them. This will lead to the RDRAND instruction returning no data transitorily. The RDRAND
instruction indicates the occurrence of this rare situation by clearing the CF flag.
The RDRAND instruction returns with the carry flag set (CF = 1) to indicate valid data
Michael,
The validity test is important. You can check that here (http://masm32.com/board/index.php?topic=2418.msg25220#msg25220).
Gunther
Gunther,
Thanks, I try to read every post but I somehow missed your RDRAND thread.
Michael,
Quote from: MichaelW on August 18, 2014, 12:38:21 PM
Thanks, I try to read every post but I somehow missed your RDRAND thread.
never mind. Here (http://masm32.com/board/index.php?topic=2441.msg25558#msg25558) is a 32-bit version.
Gunther