test 1024 combinations of AL, CF and AF. Signed-off-by: Avi Kivity <avi@xxxxxxxxxx> --- x86/realmode.c | 284 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 284 insertions(+), 0 deletions(-) diff --git a/x86/realmode.c b/x86/realmode.c index c15e532..7c358f9 100644 --- a/x86/realmode.c +++ b/x86/realmode.c @@ -1263,6 +1263,289 @@ void test_loopcc(void) print_serial("LOOPcc short Test 3: PASS\n"); } +static void test_das(void) +{ + struct regs inregs = { 0 }, outregs = { 0 }; + short i; + static unsigned test_cases[1024] = { + 0x46000000, 0x8701a000, 0x9710fa00, 0x97119a00, + 0x02000101, 0x8301a101, 0x9310fb01, 0x93119b01, + 0x02000202, 0x8301a202, 0x9710fc02, 0x97119c02, + 0x06000303, 0x8701a303, 0x9310fd03, 0x93119d03, + 0x02000404, 0x8301a404, 0x9310fe04, 0x93119e04, + 0x06000505, 0x8701a505, 0x9710ff05, 0x97119f05, + 0x06000606, 0x8701a606, 0x56100006, 0x9711a006, + 0x02000707, 0x8301a707, 0x12100107, 0x9311a107, + 0x02000808, 0x8301a808, 0x12100208, 0x9311a208, + 0x06000909, 0x8701a909, 0x16100309, 0x9711a309, + 0x1200040a, 0x9301a40a, 0x1210040a, 0x9311a40a, + 0x1600050b, 0x9701a50b, 0x1610050b, 0x9711a50b, + 0x1600060c, 0x9701a60c, 0x1610060c, 0x9711a60c, + 0x1200070d, 0x9301a70d, 0x1210070d, 0x9311a70d, + 0x1200080e, 0x9301a80e, 0x1210080e, 0x9311a80e, + 0x1600090f, 0x9701a90f, 0x1610090f, 0x9711a90f, + 0x02001010, 0x8301b010, 0x16100a10, 0x9711aa10, + 0x06001111, 0x8701b111, 0x12100b11, 0x9311ab11, + 0x06001212, 0x8701b212, 0x16100c12, 0x9711ac12, + 0x02001313, 0x8301b313, 0x12100d13, 0x9311ad13, + 0x06001414, 0x8701b414, 0x12100e14, 0x9311ae14, + 0x02001515, 0x8301b515, 0x16100f15, 0x9711af15, + 0x02001616, 0x8301b616, 0x12101016, 0x9311b016, + 0x06001717, 0x8701b717, 0x16101117, 0x9711b117, + 0x06001818, 0x8701b818, 0x16101218, 0x9711b218, + 0x02001919, 0x8301b919, 0x12101319, 0x9311b319, + 0x1600141a, 0x9701b41a, 0x1610141a, 0x9711b41a, + 0x1200151b, 0x9301b51b, 0x1210151b, 0x9311b51b, + 0x1200161c, 0x9301b61c, 0x1210161c, 0x9311b61c, + 0x1600171d, 0x9701b71d, 0x1610171d, 0x9711b71d, + 0x1600181e, 0x9701b81e, 0x1610181e, 0x9711b81e, + 0x1200191f, 0x9301b91f, 0x1210191f, 0x9311b91f, + 0x02002020, 0x8701c020, 0x12101a20, 0x9311ba20, + 0x06002121, 0x8301c121, 0x16101b21, 0x9711bb21, + 0x06002222, 0x8301c222, 0x12101c22, 0x9311bc22, + 0x02002323, 0x8701c323, 0x16101d23, 0x9711bd23, + 0x06002424, 0x8301c424, 0x16101e24, 0x9711be24, + 0x02002525, 0x8701c525, 0x12101f25, 0x9311bf25, + 0x02002626, 0x8701c626, 0x12102026, 0x9711c026, + 0x06002727, 0x8301c727, 0x16102127, 0x9311c127, + 0x06002828, 0x8301c828, 0x16102228, 0x9311c228, + 0x02002929, 0x8701c929, 0x12102329, 0x9711c329, + 0x1600242a, 0x9301c42a, 0x1610242a, 0x9311c42a, + 0x1200252b, 0x9701c52b, 0x1210252b, 0x9711c52b, + 0x1200262c, 0x9701c62c, 0x1210262c, 0x9711c62c, + 0x1600272d, 0x9301c72d, 0x1610272d, 0x9311c72d, + 0x1600282e, 0x9301c82e, 0x1610282e, 0x9311c82e, + 0x1200292f, 0x9701c92f, 0x1210292f, 0x9711c92f, + 0x06003030, 0x8301d030, 0x12102a30, 0x9711ca30, + 0x02003131, 0x8701d131, 0x16102b31, 0x9311cb31, + 0x02003232, 0x8701d232, 0x12102c32, 0x9711cc32, + 0x06003333, 0x8301d333, 0x16102d33, 0x9311cd33, + 0x02003434, 0x8701d434, 0x16102e34, 0x9311ce34, + 0x06003535, 0x8301d535, 0x12102f35, 0x9711cf35, + 0x06003636, 0x8301d636, 0x16103036, 0x9311d036, + 0x02003737, 0x8701d737, 0x12103137, 0x9711d137, + 0x02003838, 0x8701d838, 0x12103238, 0x9711d238, + 0x06003939, 0x8301d939, 0x16103339, 0x9311d339, + 0x1200343a, 0x9701d43a, 0x1210343a, 0x9711d43a, + 0x1600353b, 0x9301d53b, 0x1610353b, 0x9311d53b, + 0x1600363c, 0x9301d63c, 0x1610363c, 0x9311d63c, + 0x1200373d, 0x9701d73d, 0x1210373d, 0x9711d73d, + 0x1200383e, 0x9701d83e, 0x1210383e, 0x9711d83e, + 0x1600393f, 0x9301d93f, 0x1610393f, 0x9311d93f, + 0x02004040, 0x8301e040, 0x16103a40, 0x9311da40, + 0x06004141, 0x8701e141, 0x12103b41, 0x9711db41, + 0x06004242, 0x8701e242, 0x16103c42, 0x9311dc42, + 0x02004343, 0x8301e343, 0x12103d43, 0x9711dd43, + 0x06004444, 0x8701e444, 0x12103e44, 0x9711de44, + 0x02004545, 0x8301e545, 0x16103f45, 0x9311df45, + 0x02004646, 0x8301e646, 0x12104046, 0x9311e046, + 0x06004747, 0x8701e747, 0x16104147, 0x9711e147, + 0x06004848, 0x8701e848, 0x16104248, 0x9711e248, + 0x02004949, 0x8301e949, 0x12104349, 0x9311e349, + 0x1600444a, 0x9701e44a, 0x1610444a, 0x9711e44a, + 0x1200454b, 0x9301e54b, 0x1210454b, 0x9311e54b, + 0x1200464c, 0x9301e64c, 0x1210464c, 0x9311e64c, + 0x1600474d, 0x9701e74d, 0x1610474d, 0x9711e74d, + 0x1600484e, 0x9701e84e, 0x1610484e, 0x9711e84e, + 0x1200494f, 0x9301e94f, 0x1210494f, 0x9311e94f, + 0x06005050, 0x8701f050, 0x12104a50, 0x9311ea50, + 0x02005151, 0x8301f151, 0x16104b51, 0x9711eb51, + 0x02005252, 0x8301f252, 0x12104c52, 0x9311ec52, + 0x06005353, 0x8701f353, 0x16104d53, 0x9711ed53, + 0x02005454, 0x8301f454, 0x16104e54, 0x9711ee54, + 0x06005555, 0x8701f555, 0x12104f55, 0x9311ef55, + 0x06005656, 0x8701f656, 0x16105056, 0x9711f056, + 0x02005757, 0x8301f757, 0x12105157, 0x9311f157, + 0x02005858, 0x8301f858, 0x12105258, 0x9311f258, + 0x06005959, 0x8701f959, 0x16105359, 0x9711f359, + 0x1200545a, 0x9301f45a, 0x1210545a, 0x9311f45a, + 0x1600555b, 0x9701f55b, 0x1610555b, 0x9711f55b, + 0x1600565c, 0x9701f65c, 0x1610565c, 0x9711f65c, + 0x1200575d, 0x9301f75d, 0x1210575d, 0x9311f75d, + 0x1200585e, 0x9301f85e, 0x1210585e, 0x9311f85e, + 0x1600595f, 0x9701f95f, 0x1610595f, 0x9711f95f, + 0x06006060, 0x47010060, 0x16105a60, 0x9711fa60, + 0x02006161, 0x03010161, 0x12105b61, 0x9311fb61, + 0x02006262, 0x03010262, 0x16105c62, 0x9711fc62, + 0x06006363, 0x07010363, 0x12105d63, 0x9311fd63, + 0x02006464, 0x03010464, 0x12105e64, 0x9311fe64, + 0x06006565, 0x07010565, 0x16105f65, 0x9711ff65, + 0x06006666, 0x07010666, 0x16106066, 0x57110066, + 0x02006767, 0x03010767, 0x12106167, 0x13110167, + 0x02006868, 0x03010868, 0x12106268, 0x13110268, + 0x06006969, 0x07010969, 0x16106369, 0x17110369, + 0x1200646a, 0x1301046a, 0x1210646a, 0x1311046a, + 0x1600656b, 0x1701056b, 0x1610656b, 0x1711056b, + 0x1600666c, 0x1701066c, 0x1610666c, 0x1711066c, + 0x1200676d, 0x1301076d, 0x1210676d, 0x1311076d, + 0x1200686e, 0x1301086e, 0x1210686e, 0x1311086e, + 0x1600696f, 0x1701096f, 0x1610696f, 0x1711096f, + 0x02007070, 0x03011070, 0x16106a70, 0x17110a70, + 0x06007171, 0x07011171, 0x12106b71, 0x13110b71, + 0x06007272, 0x07011272, 0x16106c72, 0x17110c72, + 0x02007373, 0x03011373, 0x12106d73, 0x13110d73, + 0x06007474, 0x07011474, 0x12106e74, 0x13110e74, + 0x02007575, 0x03011575, 0x16106f75, 0x17110f75, + 0x02007676, 0x03011676, 0x12107076, 0x13111076, + 0x06007777, 0x07011777, 0x16107177, 0x17111177, + 0x06007878, 0x07011878, 0x16107278, 0x17111278, + 0x02007979, 0x03011979, 0x12107379, 0x13111379, + 0x1600747a, 0x1701147a, 0x1610747a, 0x1711147a, + 0x1200757b, 0x1301157b, 0x1210757b, 0x1311157b, + 0x1200767c, 0x1301167c, 0x1210767c, 0x1311167c, + 0x1600777d, 0x1701177d, 0x1610777d, 0x1711177d, + 0x1600787e, 0x1701187e, 0x1610787e, 0x1711187e, + 0x1200797f, 0x1301197f, 0x1210797f, 0x1311197f, + 0x82008080, 0x03012080, 0x12107a80, 0x13111a80, + 0x86008181, 0x07012181, 0x16107b81, 0x17111b81, + 0x86008282, 0x07012282, 0x12107c82, 0x13111c82, + 0x82008383, 0x03012383, 0x16107d83, 0x17111d83, + 0x86008484, 0x07012484, 0x16107e84, 0x17111e84, + 0x82008585, 0x03012585, 0x12107f85, 0x13111f85, + 0x82008686, 0x03012686, 0x92108086, 0x13112086, + 0x86008787, 0x07012787, 0x96108187, 0x17112187, + 0x86008888, 0x07012888, 0x96108288, 0x17112288, + 0x82008989, 0x03012989, 0x92108389, 0x13112389, + 0x9600848a, 0x1701248a, 0x9610848a, 0x1711248a, + 0x9200858b, 0x1301258b, 0x9210858b, 0x1311258b, + 0x9200868c, 0x1301268c, 0x9210868c, 0x1311268c, + 0x9600878d, 0x1701278d, 0x9610878d, 0x1711278d, + 0x9600888e, 0x1701288e, 0x9610888e, 0x1711288e, + 0x9200898f, 0x1301298f, 0x9210898f, 0x1311298f, + 0x86009090, 0x07013090, 0x92108a90, 0x13112a90, + 0x82009191, 0x03013191, 0x96108b91, 0x17112b91, + 0x82009292, 0x03013292, 0x92108c92, 0x13112c92, + 0x86009393, 0x07013393, 0x96108d93, 0x17112d93, + 0x82009494, 0x03013494, 0x96108e94, 0x17112e94, + 0x86009595, 0x07013595, 0x92108f95, 0x13112f95, + 0x86009696, 0x07013696, 0x96109096, 0x17113096, + 0x82009797, 0x03013797, 0x92109197, 0x13113197, + 0x82009898, 0x03013898, 0x92109298, 0x13113298, + 0x86009999, 0x07013999, 0x96109399, 0x17113399, + 0x1300349a, 0x1301349a, 0x1310349a, 0x1311349a, + 0x1700359b, 0x1701359b, 0x1710359b, 0x1711359b, + 0x1700369c, 0x1701369c, 0x1710369c, 0x1711369c, + 0x1300379d, 0x1301379d, 0x1310379d, 0x1311379d, + 0x1300389e, 0x1301389e, 0x1310389e, 0x1311389e, + 0x1700399f, 0x1701399f, 0x1710399f, 0x1711399f, + 0x030040a0, 0x030140a0, 0x17103aa0, 0x17113aa0, + 0x070041a1, 0x070141a1, 0x13103ba1, 0x13113ba1, + 0x070042a2, 0x070142a2, 0x17103ca2, 0x17113ca2, + 0x030043a3, 0x030143a3, 0x13103da3, 0x13113da3, + 0x070044a4, 0x070144a4, 0x13103ea4, 0x13113ea4, + 0x030045a5, 0x030145a5, 0x17103fa5, 0x17113fa5, + 0x030046a6, 0x030146a6, 0x131040a6, 0x131140a6, + 0x070047a7, 0x070147a7, 0x171041a7, 0x171141a7, + 0x070048a8, 0x070148a8, 0x171042a8, 0x171142a8, + 0x030049a9, 0x030149a9, 0x131043a9, 0x131143a9, + 0x170044aa, 0x170144aa, 0x171044aa, 0x171144aa, + 0x130045ab, 0x130145ab, 0x131045ab, 0x131145ab, + 0x130046ac, 0x130146ac, 0x131046ac, 0x131146ac, + 0x170047ad, 0x170147ad, 0x171047ad, 0x171147ad, + 0x170048ae, 0x170148ae, 0x171048ae, 0x171148ae, + 0x130049af, 0x130149af, 0x131049af, 0x131149af, + 0x070050b0, 0x070150b0, 0x13104ab0, 0x13114ab0, + 0x030051b1, 0x030151b1, 0x17104bb1, 0x17114bb1, + 0x030052b2, 0x030152b2, 0x13104cb2, 0x13114cb2, + 0x070053b3, 0x070153b3, 0x17104db3, 0x17114db3, + 0x030054b4, 0x030154b4, 0x17104eb4, 0x17114eb4, + 0x070055b5, 0x070155b5, 0x13104fb5, 0x13114fb5, + 0x070056b6, 0x070156b6, 0x171050b6, 0x171150b6, + 0x030057b7, 0x030157b7, 0x131051b7, 0x131151b7, + 0x030058b8, 0x030158b8, 0x131052b8, 0x131152b8, + 0x070059b9, 0x070159b9, 0x171053b9, 0x171153b9, + 0x130054ba, 0x130154ba, 0x131054ba, 0x131154ba, + 0x170055bb, 0x170155bb, 0x171055bb, 0x171155bb, + 0x170056bc, 0x170156bc, 0x171056bc, 0x171156bc, + 0x130057bd, 0x130157bd, 0x131057bd, 0x131157bd, + 0x130058be, 0x130158be, 0x131058be, 0x131158be, + 0x170059bf, 0x170159bf, 0x171059bf, 0x171159bf, + 0x070060c0, 0x070160c0, 0x17105ac0, 0x17115ac0, + 0x030061c1, 0x030161c1, 0x13105bc1, 0x13115bc1, + 0x030062c2, 0x030162c2, 0x17105cc2, 0x17115cc2, + 0x070063c3, 0x070163c3, 0x13105dc3, 0x13115dc3, + 0x030064c4, 0x030164c4, 0x13105ec4, 0x13115ec4, + 0x070065c5, 0x070165c5, 0x17105fc5, 0x17115fc5, + 0x070066c6, 0x070166c6, 0x171060c6, 0x171160c6, + 0x030067c7, 0x030167c7, 0x131061c7, 0x131161c7, + 0x030068c8, 0x030168c8, 0x131062c8, 0x131162c8, + 0x070069c9, 0x070169c9, 0x171063c9, 0x171163c9, + 0x130064ca, 0x130164ca, 0x131064ca, 0x131164ca, + 0x170065cb, 0x170165cb, 0x171065cb, 0x171165cb, + 0x170066cc, 0x170166cc, 0x171066cc, 0x171166cc, + 0x130067cd, 0x130167cd, 0x131067cd, 0x131167cd, + 0x130068ce, 0x130168ce, 0x131068ce, 0x131168ce, + 0x170069cf, 0x170169cf, 0x171069cf, 0x171169cf, + 0x030070d0, 0x030170d0, 0x17106ad0, 0x17116ad0, + 0x070071d1, 0x070171d1, 0x13106bd1, 0x13116bd1, + 0x070072d2, 0x070172d2, 0x17106cd2, 0x17116cd2, + 0x030073d3, 0x030173d3, 0x13106dd3, 0x13116dd3, + 0x070074d4, 0x070174d4, 0x13106ed4, 0x13116ed4, + 0x030075d5, 0x030175d5, 0x17106fd5, 0x17116fd5, + 0x030076d6, 0x030176d6, 0x131070d6, 0x131170d6, + 0x070077d7, 0x070177d7, 0x171071d7, 0x171171d7, + 0x070078d8, 0x070178d8, 0x171072d8, 0x171172d8, + 0x030079d9, 0x030179d9, 0x131073d9, 0x131173d9, + 0x170074da, 0x170174da, 0x171074da, 0x171174da, + 0x130075db, 0x130175db, 0x131075db, 0x131175db, + 0x130076dc, 0x130176dc, 0x131076dc, 0x131176dc, + 0x170077dd, 0x170177dd, 0x171077dd, 0x171177dd, + 0x170078de, 0x170178de, 0x171078de, 0x171178de, + 0x130079df, 0x130179df, 0x131079df, 0x131179df, + 0x830080e0, 0x830180e0, 0x13107ae0, 0x13117ae0, + 0x870081e1, 0x870181e1, 0x17107be1, 0x17117be1, + 0x870082e2, 0x870182e2, 0x13107ce2, 0x13117ce2, + 0x830083e3, 0x830183e3, 0x17107de3, 0x17117de3, + 0x870084e4, 0x870184e4, 0x17107ee4, 0x17117ee4, + 0x830085e5, 0x830185e5, 0x13107fe5, 0x13117fe5, + 0x830086e6, 0x830186e6, 0x931080e6, 0x931180e6, + 0x870087e7, 0x870187e7, 0x971081e7, 0x971181e7, + 0x870088e8, 0x870188e8, 0x971082e8, 0x971182e8, + 0x830089e9, 0x830189e9, 0x931083e9, 0x931183e9, + 0x970084ea, 0x970184ea, 0x971084ea, 0x971184ea, + 0x930085eb, 0x930185eb, 0x931085eb, 0x931185eb, + 0x930086ec, 0x930186ec, 0x931086ec, 0x931186ec, + 0x970087ed, 0x970187ed, 0x971087ed, 0x971187ed, + 0x970088ee, 0x970188ee, 0x971088ee, 0x971188ee, + 0x930089ef, 0x930189ef, 0x931089ef, 0x931189ef, + 0x870090f0, 0x870190f0, 0x93108af0, 0x93118af0, + 0x830091f1, 0x830191f1, 0x97108bf1, 0x97118bf1, + 0x830092f2, 0x830192f2, 0x93108cf2, 0x93118cf2, + 0x870093f3, 0x870193f3, 0x97108df3, 0x97118df3, + 0x830094f4, 0x830194f4, 0x97108ef4, 0x97118ef4, + 0x870095f5, 0x870195f5, 0x93108ff5, 0x93118ff5, + 0x870096f6, 0x870196f6, 0x971090f6, 0x971190f6, + 0x830097f7, 0x830197f7, 0x931091f7, 0x931191f7, + 0x830098f8, 0x830198f8, 0x931092f8, 0x931192f8, + 0x870099f9, 0x870199f9, 0x971093f9, 0x971193f9, + 0x930094fa, 0x930194fa, 0x931094fa, 0x931194fa, + 0x970095fb, 0x970195fb, 0x971095fb, 0x971195fb, + 0x970096fc, 0x970196fc, 0x971096fc, 0x971196fc, + 0x930097fd, 0x930197fd, 0x931097fd, 0x931197fd, + 0x930098fe, 0x930198fe, 0x931098fe, 0x931198fe, + 0x970099ff, 0x970199ff, 0x971099ff, 0x971199ff, + }; + + MK_INSN(das, "das"); + + for (i = 0; i < 1024; ++i) { + unsigned tmp = test_cases[i]; + inregs.eax = tmp & 0xff; + inregs.eflags = (tmp >> 16) & 0xff; + exec_in_big_real_mode(&inregs, &outregs, + insn_das, + insn_das_end - insn_das); + + if (!regs_equal(&inregs, &outregs, R_AX) + || outregs.eax != ((tmp >> 8) & 0xff) + || (outregs.eflags & 0xff) != (tmp >> 24)) { + print_serial("DAS Test: FAIL\n"); + return; + } + } + print_serial("DAS Test: PASS\n"); +} + void realmode_start(void) { test_null(); @@ -1292,6 +1575,7 @@ void realmode_start(void) test_idiv(); test_loopcc(); test_cbw(); + test_das(); exit(0); } -- 1.7.1 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html