Commit 288426fe3c50857752ca6e2d24d035a6ecc877d9

Authored by bellard
1 parent 72cc3881

added LAR/LSL tests


git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@152 c046a42c-6fe2-441c-8c8c-71466251a162
Showing 1 changed file with 23 additions and 0 deletions
tests/test-i386.c
... ... @@ -707,6 +707,19 @@ uint8_t seg_data2[4096];
707 707  
708 708 #define MK_SEL(n) (((n) << 3) | 7)
709 709  
  710 +#define TEST_LR(op, size, seg, mask)\
  711 +{\
  712 + int res, res2;\
  713 + res = 0x12345678;\
  714 + asm (op " %" size "2, %" size "0\n" \
  715 + "movl $0, %1\n"\
  716 + "jnz 1f\n"\
  717 + "movl $1, %1\n"\
  718 + "1:\n"\
  719 + : "=r" (res), "=r" (res2) : "m" (seg), "0" (res));\
  720 + printf(op ": Z=%d %08x\n", res2, res & ~(mask));\
  721 +}
  722 +
710 723 /* NOTE: we use Linux modify_ldt syscall */
711 724 void test_segs(void)
712 725 {
... ... @@ -784,6 +797,16 @@ void test_segs(void)
784 797 : "=r" (res), "=g" (res2)
785 798 : "m" (segoff));
786 799 printf("FS:reg = %04x:%08x\n", res2, res);
  800 +
  801 + TEST_LR("larw", "w", MK_SEL(2), 0x0100);
  802 + TEST_LR("larl", "", MK_SEL(2), 0x0100);
  803 + TEST_LR("lslw", "w", MK_SEL(2), 0);
  804 + TEST_LR("lsll", "", MK_SEL(2), 0);
  805 +
  806 + TEST_LR("larw", "w", 0xfff8, 0);
  807 + TEST_LR("larl", "", 0xfff8, 0);
  808 + TEST_LR("lslw", "w", 0xfff8, 0);
  809 + TEST_LR("lsll", "", 0xfff8, 0);
787 810 }
788 811  
789 812 /* 16 bit code test */
... ...