Hello community, here is the log from the commit of package libx86emu for openSUSE:Factory checked in at 2019-03-26 15:35:37 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/libx86emu (Old) and /work/SRC/openSUSE:Factory/.libx86emu.new.25356 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "libx86emu" Tue Mar 26 15:35:37 2019 rev:26 rq:687301 version:2.2 Changes: -------- --- /work/SRC/openSUSE:Factory/libx86emu/libx86emu.changes 2019-02-08 13:47:09.422802515 +0100 +++ /work/SRC/openSUSE:Factory/.libx86emu.new.25356/libx86emu.changes 2019-03-26 15:35:40.260416159 +0100 @@ -0,0 +1,9 @@ +-------------------------------------------------------------------- +Thu Mar 21 11:45:15 UTC 2019 - [email protected] + +- merge gh#wfeldt/libx86emu#14 +- ops2: Add support for conditional move +- ops2: Implement bswap +- Add additional ops2 instructions +- 2.2 + Old: ---- libx86emu-2.1.tar.xz New: ---- libx86emu-2.2.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ libx86emu.spec ++++++ --- /var/tmp/diff_new_pack.9YIAZC/_old 2019-03-26 15:35:40.880415899 +0100 +++ /var/tmp/diff_new_pack.9YIAZC/_new 2019-03-26 15:35:40.884415897 +0100 @@ -22,7 +22,7 @@ Summary: An x86 emulation library License: BSD-3-Clause Group: Development/Libraries/C and C++ -Version: 2.1 +Version: 2.2 Release: 0 Source: %{name}-%{version}.tar.xz Url: https://github.com/wfeldt/libx86emu ++++++ libx86emu-2.1.tar.xz -> libx86emu-2.2.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libx86emu-2.1/VERSION new/libx86emu-2.2/VERSION --- old/libx86emu-2.1/VERSION 2018-08-30 15:31:45.000000000 +0200 +++ new/libx86emu-2.2/VERSION 2019-03-21 12:45:15.000000000 +0100 @@ -1 +1 @@ -2.1 +2.2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libx86emu-2.1/changelog new/libx86emu-2.2/changelog --- old/libx86emu-2.1/changelog 2018-08-30 15:31:45.000000000 +0200 +++ new/libx86emu-2.2/changelog 2019-03-21 12:45:15.000000000 +0100 @@ -1,3 +1,8 @@ +2019-03-21: 2.2 + - merge gh#wfeldt/libx86emu#14 + - ops2: Add support for conditional move + - ops2: Implement bswap + 2018-08-30: 2.1 - merge gh#wfeldt/libx86emu#13 - Fix README.md header typos diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/libx86emu-2.1/ops2.c new/libx86emu-2.2/ops2.c --- old/libx86emu-2.1/ops2.c 2018-08-30 15:31:45.000000000 +0200 +++ new/libx86emu-2.2/ops2.c 2019-03-21 12:45:15.000000000 +0100 @@ -482,6 +482,121 @@ /**************************************************************************** REMARKS: +Handles opcode 0x0f,0x40-0x4f +****************************************************************************/ +static void x86emuOp2_conditional_move(x86emu_t *emu, u8 op2) +{ + int mod, rl, rh, noop = 0; + u16 *src16, *dst16; + u32 *src32, *dst32, addr; + + OP_DECODE("cmov"); + + fetch_decode_modrm(emu, &mod, &rh, &rl); + + switch(op2 & 0xf) { + case 0: + OP_DECODE("o "); + noop = !ACCESS_FLAG(F_OF); + break; + case 1: + OP_DECODE("no "); + noop = ACCESS_FLAG(F_OF); + break; + case 2: + OP_DECODE("c "); + noop = !ACCESS_FLAG(F_CF); + break; + case 3: + OP_DECODE("nc "); + noop = ACCESS_FLAG(F_CF); + break; + case 4: + OP_DECODE("z "); + noop = !ACCESS_FLAG(F_ZF); + break; + case 5: + OP_DECODE("nz "); + noop = ACCESS_FLAG(F_ZF); + break; + case 6: + OP_DECODE("be "); + noop = !ACCESS_FLAG(F_CF) && !ACCESS_FLAG(F_ZF); + break; + case 7: + OP_DECODE("nbe "); + noop = ACCESS_FLAG(F_CF) || ACCESS_FLAG(F_ZF); + break; + case 8: + OP_DECODE("s "); + noop = !ACCESS_FLAG(F_SF); + break; + case 9: + OP_DECODE("ns "); + noop = ACCESS_FLAG(F_SF); + break; + case 0xa: + OP_DECODE("p "); + noop = !ACCESS_FLAG(F_PF); + break; + case 0xb: + OP_DECODE("np "); + noop = ACCESS_FLAG(F_PF); + break; + case 0xc: + OP_DECODE("l "); + noop = ACCESS_FLAG(F_SF) == ACCESS_FLAG(F_OF); + break; + case 0xd: + OP_DECODE("nl "); + noop = ACCESS_FLAG(F_SF) != ACCESS_FLAG(F_OF); + break; + case 0xe: + OP_DECODE("le "); + noop = !ACCESS_FLAG(F_ZF) && (ACCESS_FLAG(F_SF) == ACCESS_FLAG(F_OF)); + break; + case 0xf: + OP_DECODE("nle "); + noop = ACCESS_FLAG(F_ZF) || (ACCESS_FLAG(F_SF) != ACCESS_FLAG(F_OF)); + break; + } + + if(mod == 3) { + if(MODE_DATA32) { + dst32 = decode_rm_long_register(emu, rh); + OP_DECODE(","); + src32 = decode_rm_long_register(emu, rl); + if(!noop) + *dst32 = *src32; + } + else { + dst16 = decode_rm_word_register(emu, rh); + OP_DECODE(","); + src16 = decode_rm_word_register(emu, rl); + if(!noop) + *dst16 = *src16; + } + } + else { + if(MODE_DATA32) { + dst32 = decode_rm_long_register(emu, rh); + OP_DECODE(","); + addr = decode_rm_address(emu, mod, rl); + if(!noop) + *dst32 = fetch_data_long(emu, addr); + } + else { + dst16 = decode_rm_word_register(emu, rh); + OP_DECODE(","); + addr = decode_rm_address(emu, mod, rl); + if(!noop) + *dst16 = fetch_data_word(emu, addr); + } + } +} + +/**************************************************************************** +REMARKS: Handles opcode 0x0f,0x80-0x8F ****************************************************************************/ static void x86emuOp2_long_jump(x86emu_t *emu, u8 op2) @@ -1619,6 +1734,31 @@ } +/**************************************************************************** +REMARKS: +Handles opcode 0x0f,0xc8-0xcf +****************************************************************************/ +static void x86emuOp2_bswap(x86emu_t *emu, u8 op2) +{ + u32 *reg32, tmp; + + OP_DECODE("bswap "); + + if(MODE_DATA32) { + reg32 = decode_rm_long_register(emu, op2 & 0x7); + tmp = 0; + tmp |= (*reg32 >> 24) & 0x000000ff; + tmp |= (*reg32 >> 8) & 0x0000ff00; + tmp |= (*reg32 << 8) & 0x00ff0000; + tmp |= (*reg32 << 24) & 0xff000000; + + *reg32 = tmp; + } + else { + /* undefined. Do nothing */ + } +} + /*************************************************************************** * Double byte operation code table: **************************************************************************/ @@ -1692,22 +1832,22 @@ /* 0x3e */ x86emuOp2_illegal_op, /* 0x3f */ x86emuOp2_illegal_op, - /* 0x40 */ x86emuOp2_illegal_op, - /* 0x41 */ x86emuOp2_illegal_op, - /* 0x42 */ x86emuOp2_illegal_op, - /* 0x43 */ x86emuOp2_illegal_op, - /* 0x44 */ x86emuOp2_illegal_op, - /* 0x45 */ x86emuOp2_illegal_op, - /* 0x46 */ x86emuOp2_illegal_op, - /* 0x47 */ x86emuOp2_illegal_op, - /* 0x48 */ x86emuOp2_illegal_op, - /* 0x49 */ x86emuOp2_illegal_op, - /* 0x4a */ x86emuOp2_illegal_op, - /* 0x4b */ x86emuOp2_illegal_op, - /* 0x4c */ x86emuOp2_illegal_op, - /* 0x4d */ x86emuOp2_illegal_op, - /* 0x4e */ x86emuOp2_illegal_op, - /* 0x4f */ x86emuOp2_illegal_op, + /* 0x40 */ x86emuOp2_conditional_move, + /* 0x41 */ x86emuOp2_conditional_move, + /* 0x42 */ x86emuOp2_conditional_move, + /* 0x43 */ x86emuOp2_conditional_move, + /* 0x44 */ x86emuOp2_conditional_move, + /* 0x45 */ x86emuOp2_conditional_move, + /* 0x46 */ x86emuOp2_conditional_move, + /* 0x47 */ x86emuOp2_conditional_move, + /* 0x48 */ x86emuOp2_conditional_move, + /* 0x49 */ x86emuOp2_conditional_move, + /* 0x4a */ x86emuOp2_conditional_move, + /* 0x4b */ x86emuOp2_conditional_move, + /* 0x4c */ x86emuOp2_conditional_move, + /* 0x4d */ x86emuOp2_conditional_move, + /* 0x4e */ x86emuOp2_conditional_move, + /* 0x4f */ x86emuOp2_conditional_move, /* 0x50 */ x86emuOp2_illegal_op, /* 0x51 */ x86emuOp2_illegal_op, @@ -1836,14 +1976,14 @@ /* 0xc5 */ x86emuOp2_illegal_op, /* 0xc6 */ x86emuOp2_illegal_op, /* 0xc7 */ x86emuOp2_illegal_op, - /* 0xc8 */ x86emuOp2_illegal_op, /* TODO: bswap */ - /* 0xc9 */ x86emuOp2_illegal_op, /* TODO: bswap */ - /* 0xca */ x86emuOp2_illegal_op, /* TODO: bswap */ - /* 0xcb */ x86emuOp2_illegal_op, /* TODO: bswap */ - /* 0xcc */ x86emuOp2_illegal_op, /* TODO: bswap */ - /* 0xcd */ x86emuOp2_illegal_op, /* TODO: bswap */ - /* 0xce */ x86emuOp2_illegal_op, /* TODO: bswap */ - /* 0xcf */ x86emuOp2_illegal_op, /* TODO: bswap */ + /* 0xc8 */ x86emuOp2_bswap, + /* 0xc9 */ x86emuOp2_bswap, + /* 0xca */ x86emuOp2_bswap, + /* 0xcb */ x86emuOp2_bswap, + /* 0xcc */ x86emuOp2_bswap, + /* 0xcd */ x86emuOp2_bswap, + /* 0xce */ x86emuOp2_bswap, + /* 0xcf */ x86emuOp2_bswap, /* 0xd0 */ x86emuOp2_illegal_op, /* 0xd1 */ x86emuOp2_illegal_op,
