From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: [PATCH] emulator: simple ALU tests Date: Fri, 4 Jan 2013 16:17:04 +0200 Message-ID: <1357309024-11736-1-git-send-email-avi.kivity@gmail.com> Cc: kvm@vger.kernel.org To: Marcelo Tosatti , Gleb Natapov Return-path: Received: from mail-wg0-f48.google.com ([74.125.82.48]:33342 "EHLO mail-wg0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754741Ab3ADORK (ORCPT ); Fri, 4 Jan 2013 09:17:10 -0500 Received: by mail-wg0-f48.google.com with SMTP id dt10so7433052wgb.15 for ; Fri, 04 Jan 2013 06:17:08 -0800 (PST) Sender: kvm-owner@vger.kernel.org List-ID: Signed-off-by: Avi Kivity --- x86/emulator.c | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/x86/emulator.c b/x86/emulator.c index c39027a..a128e13 100644 --- a/x86/emulator.c +++ b/x86/emulator.c @@ -863,6 +863,31 @@ static void test_ltr(volatile uint16_t *mem) report("ltr", str() == tr && (*trp & busy_mask)); } +static void test_simplealu(u32 *mem) +{ + *mem = 0x1234; + asm("or %1, %0" : "+m"(*mem) : "r"(0x8001)); + report("or", *mem == 0x9235); + asm("add %1, %0" : "+m"(*mem) : "r"(2)); + report("add", *mem == 0x9237); + asm("xor %1, %0" : "+m"(*mem) : "r"(0x1111)); + report("xor", *mem == 0x8326); + asm("sub %1, %0" : "+m"(*mem) : "r"(0x26)); + report("sub", *mem == 0x8300); + asm("clc; adc %1, %0" : "+m"(*mem) : "r"(0x100)); + report("adc(0)", *mem == 0x8400); + asm("stc; adc %1, %0" : "+m"(*mem) : "r"(0x100)); + report("adc(0)", *mem == 0x8501); + asm("clc; sbb %1, %0" : "+m"(*mem) : "r"(0)); + report("sbb(0)", *mem == 0x8501); + asm("stc; sbb %1, %0" : "+m"(*mem) : "r"(0)); + report("sbb(1)", *mem == 0x8500); + asm("and %1, %0" : "+m"(*mem) : "r"(0xfe77)); + report("and", *mem == 0x8400); + asm("test %1, %0" : "+m"(*mem) : "r"(0xf000)); + report("test", *mem == 0x8400); +} + int main() { void *mem; @@ -889,6 +914,7 @@ int main() : "memory"); report("mov reg, r/m (1)", t2 == 0x123456789abcdef); + test_simplealu(mem); test_cmps(mem); test_scas(mem); -- 1.8.0.1