News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests

Main Menu

RDRAND

Started by MichaelW, August 16, 2014, 06:38:52 PM

Previous topic - Next topic

MichaelW

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

Well Microsoft, here's another nice mess you've gotten us into.

ragdog

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

Gunther

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
You have to know the facts before you can distort them.

Siekmanski

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 ...

Creative coders use backward thinking techniques as a strategy.

MichaelW

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?


Well Microsoft, here's another nice mess you've gotten us into.

evlncrn8

 _rv_bin_string_ db 36 dup(0)

being global, and potentially accessed by 2 threads at the same time could well be it....

MichaelW

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.

Well Microsoft, here's another nice mess you've gotten us into.

evlncrn8

im not sure then, definitely one of those 'odd' issues though

qWord

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
MREAL macros - when you need floating point arithmetic while assembling!

Gunther

Michael,

The validity test is important. You can check that here.

Gunther
You have to know the facts before you can distort them.

MichaelW

Gunther,

Thanks, I try to read every post but I somehow missed your RDRAND thread.
Well Microsoft, here's another nice mess you've gotten us into.

Gunther

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 is a 32-bit version.

Gunther
You have to know the facts before you can distort them.