Author: jkim
Date: Thu Feb 18 23:03:37 2016
New Revision: 295776
URL: https://svnweb.freebsd.org/changeset/base/295776

Log:
  Optimize ROL and ROR emulations and fix comments.

Modified:
  head/sys/contrib/x86emu/x86emu.c

Modified: head/sys/contrib/x86emu/x86emu.c
==============================================================================
--- head/sys/contrib/x86emu/x86emu.c    Thu Feb 18 23:00:01 2016        
(r295775)
+++ head/sys/contrib/x86emu/x86emu.c    Thu Feb 18 23:03:37 2016        
(r295776)
@@ -6995,15 +6995,13 @@ rol_byte(struct x86emu *emu, uint8_t d, 
                mask = (1 << cnt) - 1;
                res |= (d >> (8 - cnt)) & mask;
 
-               /* set the new carry flag, Note that it is the low order bit
-                * of the result!!!                               */
-               CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
                /* OVERFLOW is set *IFF* s==1, then it is the xor of CF and
                 * the most significant bit.  Blecck. */
                CONDITIONAL_SET_FLAG(s == 1 &&
                    XOR2((res & 0x1) + ((res >> 6) & 0x2)),
                    F_OF);
-       } else if (s != 0) {
+       }
+       if (s != 0) {
                /* set the new carry flag, Note that it is the low order bit
                 * of the result!!!                               */
                CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
@@ -7025,11 +7023,11 @@ rol_word(struct x86emu *emu, uint16_t d,
                res = (d << cnt);
                mask = (1 << cnt) - 1;
                res |= (d >> (16 - cnt)) & mask;
-               CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
                CONDITIONAL_SET_FLAG(s == 1 &&
                    XOR2((res & 0x1) + ((res >> 14) & 0x2)),
                    F_OF);
-       } else if (s != 0) {
+       }
+       if (s != 0) {
                /* set the new carry flag, Note that it is the low order bit
                 * of the result!!!                               */
                CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
@@ -7051,11 +7049,11 @@ rol_long(struct x86emu *emu, uint32_t d,
                res = (d << cnt);
                mask = (1 << cnt) - 1;
                res |= (d >> (32 - cnt)) & mask;
-               CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
                CONDITIONAL_SET_FLAG(s == 1 &&
                    XOR2((res & 0x1) + ((res >> 30) & 0x2)),
                    F_OF);
-       } else if (s != 0) {
+       }
+       if (s != 0) {
                /* set the new carry flag, Note that it is the low order bit
                 * of the result!!!                               */
                CONDITIONAL_SET_FLAG(res & 0x1, F_CF);
@@ -7093,14 +7091,12 @@ ror_byte(struct x86emu *emu, uint8_t d, 
                mask = (1 << (8 - cnt)) - 1;
                res |= (d >> (cnt)) & mask;
 
-               /* set the new carry flag, Note that it is the low order bit
-                * of the result!!!                               */
-               CONDITIONAL_SET_FLAG(res & 0x80, F_CF);
                /* OVERFLOW is set *IFF* s==1, then it is the xor of the two
                 * most significant bits.  Blecck. */
                CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 6), F_OF);
-       } else if (s != 0) {
-               /* set the new carry flag, Note that it is the low order bit
+       }
+       if (s != 0) {
+               /* set the new carry flag, Note that it is the high order bit
                 * of the result!!!                               */
                CONDITIONAL_SET_FLAG(res & 0x80, F_CF);
        }
@@ -7121,10 +7117,10 @@ ror_word(struct x86emu *emu, uint16_t d,
                res = (d << (16 - cnt));
                mask = (1 << (16 - cnt)) - 1;
                res |= (d >> (cnt)) & mask;
-               CONDITIONAL_SET_FLAG(res & 0x8000, F_CF);
                CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 14), F_OF);
-       } else if (s != 0) {
-               /* set the new carry flag, Note that it is the low order bit
+       }
+       if (s != 0) {
+               /* set the new carry flag, Note that it is the high order bit
                 * of the result!!!                               */
                CONDITIONAL_SET_FLAG(res & 0x8000, F_CF);
        }
@@ -7145,10 +7141,10 @@ ror_long(struct x86emu *emu, uint32_t d,
                res = (d << (32 - cnt));
                mask = (1 << (32 - cnt)) - 1;
                res |= (d >> (cnt)) & mask;
-               CONDITIONAL_SET_FLAG(res & 0x80000000, F_CF);
                CONDITIONAL_SET_FLAG(s == 1 && XOR2(res >> 30), F_OF);
-       } else if (s != 0) {
-               /* set the new carry flag, Note that it is the low order bit
+       }
+       if (s != 0) {
+               /* set the new carry flag, Note that it is the high order bit
                 * of the result!!!                               */
                CONDITIONAL_SET_FLAG(res & 0x80000000, F_CF);
        }
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to