Previous 199869 Revisions Next

r24599 Wednesday 31st July, 2013 at 13:16:34 UTC by Oliver Stöneberg
fixed undefined order of evaluation in FETCH* and READ* functions in src/emu/cpu/i386/i386priv.h [Carl, Oliver Stöneberg]
[src/emu/cpu/i386]i386priv.h

trunk/src/emu/cpu/i386/i386priv.h
r24598r24599
746746   UINT32 address = cpustate->pc, error;
747747
748748   if( address & 0x1 ) {       /* Unaligned read */
749      value = (FETCH(cpustate) << 0) |
750            (FETCH(cpustate) << 8);
749      value = (FETCH(cpustate) << 0);
750      value |= (FETCH(cpustate) << 8);
751751   } else {
752752      if(!translate_address(cpustate,cpustate->CPL,TRANSLATE_FETCH,&address,&error))
753753         PF_THROW(error);
r24598r24599
764764   UINT32 address = cpustate->pc, error;
765765
766766   if( cpustate->pc & 0x3 ) {      /* Unaligned read */
767      value = (FETCH(cpustate) << 0) |
768            (FETCH(cpustate) << 8) |
769            (FETCH(cpustate) << 16) |
770            (FETCH(cpustate) << 24);
767      value = (FETCH(cpustate) << 0);
768      value |= (FETCH(cpustate) << 8);
769      value |= (FETCH(cpustate) << 16);
770      value |= (FETCH(cpustate) << 24);
771771   } else {
772772      if(!translate_address(cpustate,cpustate->CPL,TRANSLATE_FETCH,&address,&error))
773773         PF_THROW(error);
r24598r24599
796796   UINT32 address = ea, error;
797797
798798   if( ea & 0x1 ) {        /* Unaligned read */
799      value = (READ8( cpustate, address+0 ) << 0) |
800            (READ8( cpustate, address+1 ) << 8);
799      value = (READ8( cpustate, address+0 ) << 0);
800      value |= (READ8( cpustate, address+1 ) << 8);
801801   } else {
802802      if(!translate_address(cpustate,cpustate->CPL,TRANSLATE_READ,&address,&error))
803803         PF_THROW(error);
r24598r24599
813813   UINT32 address = ea, error;
814814
815815   if( ea & 0x3 ) {        /* Unaligned read */
816      value = (READ8( cpustate, address+0 ) << 0) |
817            (READ8( cpustate, address+1 ) << 8) |
818            (READ8( cpustate, address+2 ) << 16) |
819            (READ8( cpustate, address+3 ) << 24);
816      value = (READ8( cpustate, address+0 ) << 0);
817      value |= (READ8( cpustate, address+1 ) << 8);
818      value |= (READ8( cpustate, address+2 ) << 16),
819      value |= (READ8( cpustate, address+3 ) << 24);
820820   } else {
821821      if(!translate_address(cpustate,cpustate->CPL,TRANSLATE_READ,&address,&error))
822822         PF_THROW(error);
r24598r24599
833833   UINT32 address = ea, error;
834834
835835   if( ea & 0x7 ) {        /* Unaligned read */
836      value = (((UINT64) READ8( cpustate, address+0 )) << 0) |
837            (((UINT64) READ8( cpustate, address+1 )) << 8) |
838            (((UINT64) READ8( cpustate, address+2 )) << 16) |
839            (((UINT64) READ8( cpustate, address+3 )) << 24) |
840            (((UINT64) READ8( cpustate, address+4 )) << 32) |
841            (((UINT64) READ8( cpustate, address+5 )) << 40) |
842            (((UINT64) READ8( cpustate, address+6 )) << 48) |
843            (((UINT64) READ8( cpustate, address+7 )) << 56);
836      value = (((UINT64) READ8( cpustate, address+0 )) << 0);
837      value |= (((UINT64) READ8( cpustate, address+1 )) << 8);
838      value |= (((UINT64) READ8( cpustate, address+2 )) << 16);
839      value |= (((UINT64) READ8( cpustate, address+3 )) << 24);
840      value |= (((UINT64) READ8( cpustate, address+4 )) << 32);
841      value |= (((UINT64) READ8( cpustate, address+5 )) << 40);
842      value |= (((UINT64) READ8( cpustate, address+6 )) << 48);
843      value |= (((UINT64) READ8( cpustate, address+7 )) << 56);
844844   } else {
845845      if(!translate_address(cpustate,cpustate->CPL,TRANSLATE_READ,&address,&error))
846846         PF_THROW(error);
847847
848848      address &= cpustate->a20_mask;
849      value = (((UINT64) cpustate->program->read_dword( address+0 )) << 0) |
850            (((UINT64) cpustate->program->read_dword( address+4 )) << 32);
849      value = (((UINT64) cpustate->program->read_dword( address+0 )) << 0);
850      value |= (((UINT64) cpustate->program->read_dword( address+4 )) << 32);
851851   }
852852   return value;
853853}
r24598r24599
867867   UINT32 address = ea, error;
868868
869869   if( ea & 0x1 ) {        /* Unaligned read */
870      value = (READ8PL0( cpustate, address+0 ) << 0) |
871            (READ8PL0( cpustate, address+1 ) << 8);
870      value = (READ8PL0( cpustate, address+0 ) << 0);
871      value |= (READ8PL0( cpustate, address+1 ) << 8);
872872   } else {
873873      if(!translate_address(cpustate,0,TRANSLATE_READ,&address,&error))
874874         PF_THROW(error);
r24598r24599
885885   UINT32 address = ea, error;
886886
887887   if( ea & 0x3 ) {        /* Unaligned read */
888      value = (READ8PL0( cpustate, address+0 ) << 0) |
889            (READ8PL0( cpustate, address+1 ) << 8) |
890            (READ8PL0( cpustate, address+2 ) << 16) |
891            (READ8PL0( cpustate, address+3 ) << 24);
888      value = (READ8PL0( cpustate, address+0 ) << 0);
889      value |= (READ8PL0( cpustate, address+1 ) << 8);
890      value |= (READ8PL0( cpustate, address+2 ) << 16);
891      value |= (READ8PL0( cpustate, address+3 ) << 24);
892892   } else {
893893      if(!translate_address(cpustate,0,TRANSLATE_READ,&address,&error))
894894         PF_THROW(error);
r24598r24599
13141314{
13151315   if (port & 1)
13161316   {
1317      return  READPORT8(cpustate, port) |
1318            (READPORT8(cpustate, port + 1) << 8);
1317      UINT16 value = READPORT8(cpustate, port);
1318      value |= (READPORT8(cpustate, port + 1) << 8);
1319      return value;
13191320   }
13201321   else
13211322   {
r24598r24599
13421343{
13431344   if (port & 3)
13441345   {
1345      return  READPORT8(cpustate, port) |
1346            (READPORT8(cpustate, port + 1) << 8) |
1347            (READPORT8(cpustate, port + 2) << 16) |
1348            (READPORT8(cpustate, port + 3) << 24);
1346      UINT32 value = READPORT8(cpustate, port);
1347      value |= (READPORT8(cpustate, port + 1) << 8);
1348      value |= (READPORT8(cpustate, port + 2) << 16);
1349      value |= (READPORT8(cpustate, port + 3) << 24);
1350      return value;
13491351   }
13501352   else
13511353   {

Previous 199869 Revisions Next


© 1997-2024 The MAME Team