OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [gcc-4.5.1/] [gcc-4.5.1-or32-1.0rc1/] [gcc/] [testsuite/] [gcc.c-torture/] [compile/] [20071114-1.c] - Diff between revs 297 and 338

Only display areas with differences | Details | Blame | View Log

Rev 297 Rev 338
/* PR tree-optimization/34046 */
/* PR tree-optimization/34046 */
/* Origin: dcb <dcb314@hotmail.com> */
/* Origin: dcb <dcb314@hotmail.com> */
 
 
typedef unsigned char bool8;
typedef unsigned char bool8;
typedef unsigned char uint8_t;
typedef unsigned char uint8_t;
typedef unsigned short int uint16_t;
typedef unsigned short int uint16_t;
typedef unsigned int uint32_t;
typedef unsigned int uint32_t;
typedef uint8_t uint8;
typedef uint8_t uint8;
typedef uint16_t uint16;
typedef uint16_t uint16;
typedef uint32_t uint32;
typedef uint32_t uint32;
 
 
struct SIAPU
struct SIAPU
{
{
    uint8 *PC;
    uint8 *PC;
    uint8 *RAM;
    uint8 *RAM;
    uint8 Bit;
    uint8 Bit;
    uint32 Address;
    uint32 Address;
    uint8 *WaitAddress1;
    uint8 *WaitAddress1;
    uint8 *WaitAddress2;
    uint8 *WaitAddress2;
    uint8 _Carry;
    uint8 _Carry;
};
};
 
 
struct SAPU
struct SAPU
{
{
    bool8 ShowROM;
    bool8 ShowROM;
    uint8 OutPorts [4];
    uint8 OutPorts [4];
    uint8 ExtraRAM [64];
    uint8 ExtraRAM [64];
    uint16 TimerTarget [3];
    uint16 TimerTarget [3];
};
};
 
 
struct SAPU APU;
struct SAPU APU;
struct SIAPU IAPU;
struct SIAPU IAPU;
 
 
void S9xSetAPUControl (uint8 byte);
void S9xSetAPUControl (uint8 byte);
void S9xSetAPUDSP (uint8 byte);
void S9xSetAPUDSP (uint8 byte);
uint8 S9xGetAPUDSP ();
uint8 S9xGetAPUDSP ();
 
 
uint8 S9xAPUGetByte (uint32 Address)
uint8 S9xAPUGetByte (uint32 Address)
{
{
  Address &= 0xffff;
  Address &= 0xffff;
 
 
  if (Address <= 0xff && Address >= 0xf0)
  if (Address <= 0xff && Address >= 0xf0)
    {
    {
      if (Address >= 0xf4 && Address <= 0xf7)
      if (Address >= 0xf4 && Address <= 0xf7)
        {
        {
          IAPU.WaitAddress2 = IAPU.WaitAddress1;
          IAPU.WaitAddress2 = IAPU.WaitAddress1;
          IAPU.WaitAddress1 = IAPU.PC;
          IAPU.WaitAddress1 = IAPU.PC;
          return (IAPU.RAM [Address]);
          return (IAPU.RAM [Address]);
        }
        }
      else if (Address == 0xf3)
      else if (Address == 0xf3)
        return (S9xGetAPUDSP ());
        return (S9xGetAPUDSP ());
 
 
      if (Address >= 0xfd)
      if (Address >= 0xfd)
        {
        {
          IAPU.WaitAddress2 = IAPU.WaitAddress1;
          IAPU.WaitAddress2 = IAPU.WaitAddress1;
          IAPU.WaitAddress1 = IAPU.PC;
          IAPU.WaitAddress1 = IAPU.PC;
          uint8 t = IAPU.RAM [Address];
          uint8 t = IAPU.RAM [Address];
          IAPU.RAM [Address] = 0;
          IAPU.RAM [Address] = 0;
          return (t);
          return (t);
        }
        }
 
 
      return (IAPU.RAM [Address]);
      return (IAPU.RAM [Address]);
    }
    }
 else
 else
   return (IAPU.RAM [Address]);
   return (IAPU.RAM [Address]);
}
}
 
 
void S9xAPUSetByte (uint8 byte, uint32 Address)
void S9xAPUSetByte (uint8 byte, uint32 Address)
{
{
  Address &= 0xffff;
  Address &= 0xffff;
 
 
  if (Address <= 0xff && Address >= 0xf0)
  if (Address <= 0xff && Address >= 0xf0)
    {
    {
      if (Address == 0xf3)
      if (Address == 0xf3)
        S9xSetAPUDSP (byte);
        S9xSetAPUDSP (byte);
      else if (Address >= 0xf4 && Address <= 0xf7)
      else if (Address >= 0xf4 && Address <= 0xf7)
        APU.OutPorts [Address - 0xf4] = byte;
        APU.OutPorts [Address - 0xf4] = byte;
      else if (Address == 0xf1)
      else if (Address == 0xf1)
        S9xSetAPUControl (byte);
        S9xSetAPUControl (byte);
      else if (Address < 0xfd)
      else if (Address < 0xfd)
        {
        {
          IAPU.RAM [Address] = byte;
          IAPU.RAM [Address] = byte;
          if (Address >= 0xfa)
          if (Address >= 0xfa)
            {
            {
              if (byte == 0)
              if (byte == 0)
                APU.TimerTarget [Address - 0xfa] = 0x100;
                APU.TimerTarget [Address - 0xfa] = 0x100;
              else
              else
                APU.TimerTarget [Address - 0xfa] = byte;
                APU.TimerTarget [Address - 0xfa] = byte;
            }
            }
        }
        }
    }
    }
  else
  else
    {
    {
      if (Address < 0xffc0)
      if (Address < 0xffc0)
        IAPU.RAM [Address] = byte;
        IAPU.RAM [Address] = byte;
      else
      else
        {
        {
          APU.ExtraRAM [Address - 0xffc0] = byte;
          APU.ExtraRAM [Address - 0xffc0] = byte;
          if (!APU.ShowROM)
          if (!APU.ShowROM)
            IAPU.RAM [Address] = byte;
            IAPU.RAM [Address] = byte;
        }
        }
    }
    }
}
}
 
 
void ApuCA ()
void ApuCA ()
{
{
  IAPU.Address = *(uint16 *) (IAPU.PC + 1);
  IAPU.Address = *(uint16 *) (IAPU.PC + 1);
  IAPU.Bit = (uint8)(IAPU.Address >> 13);
  IAPU.Bit = (uint8)(IAPU.Address >> 13);
  if ((IAPU._Carry))
  if ((IAPU._Carry))
    S9xAPUSetByte (S9xAPUGetByte (IAPU.Address) | (1 << IAPU.Bit), IAPU.Address);
    S9xAPUSetByte (S9xAPUGetByte (IAPU.Address) | (1 << IAPU.Bit), IAPU.Address);
  else
  else
    S9xAPUSetByte (S9xAPUGetByte (IAPU.Address) & ~(1 << IAPU.Bit), IAPU.Address);
    S9xAPUSetByte (S9xAPUGetByte (IAPU.Address) & ~(1 << IAPU.Bit), IAPU.Address);
}
}
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.