Testcase for bug in register allocator: esp gets assigned to a node. This was not...
authorChristoph Mallon <christoph.mallon@gmx.de>
Fri, 6 Jul 2007 20:27:08 +0000 (20:27 +0000)
committerChristoph Mallon <christoph.mallon@gmx.de>
Fri, 6 Jul 2007 20:27:08 +0000 (20:27 +0000)
[r14982]

ir/be/test/fehler39.c [new file with mode: 0644]

diff --git a/ir/be/test/fehler39.c b/ir/be/test/fehler39.c
new file mode 100644 (file)
index 0000000..0d81e39
--- /dev/null
@@ -0,0 +1,680 @@
+#include <string.h>
+
+
+#define ANI_TOPMOST_LEVEL               7
+#define CELL_X_SIZE                    10
+#define CELL_Y_SIZE                    10
+#define EXPLOSION_FLAG_USEABSPOS      0x00000001
+#define EXPLOSION_FLAG_DISPLAYONLY    0x00000002
+#define HIGHVOLUME                    127
+#define MIN_AMB_LEVEL_FOR_MERC_LIGHTS   9
+#define ROOF_LEVEL_HEIGHT              50
+#define TRUE                            1
+#define WALL_HEIGHT                    50
+
+
+#define ANITILE_FORWARD                                                                                        0x00000040
+#define ANITILE_CACHEDTILE                                                                     0x00008000
+#define ANITILE_NOZBLITTER                                                                     0x00040000
+#define ANITILE_ALWAYS_TRANSLUCENT                                     0x00100000
+#define ANITILE_EXPLOSION                                                                              0x20000000
+
+
+typedef unsigned char  BOOLEAN;
+typedef          char  CHAR8;
+typedef   signed char   INT8;
+typedef unsigned char  UINT8;
+typedef   signed short  INT16;
+typedef unsigned short UINT16;
+typedef   signed int    INT32;
+typedef unsigned int   UINT32;
+
+
+typedef struct LEVELNODE LEVELNODE;
+
+
+typedef struct TAG_anitile_params
+{
+       UINT32                                                                                  uiFlags;                                                        // flags struct
+       UINT8                                                                                           ubLevelID;                                              // Level ID for rendering layer
+       INT16                                                                                     sStartFrame;                                  // Start frame
+       INT16                                                                                           sDelay;                                                         // Delay time
+       UINT16                                                                                  usTileType;                                             // Tile databse type ( optional )
+       UINT16                                                                                  usTileIndex;                                    // Tile database index ( optional )
+       INT16                                                                                           sX;                                                                             // World X ( optional )
+       INT16                                                                                           sY;                                                                             // World Y ( optional )
+       INT16                                                                                           sZ;                                                                             // World Z ( optional )
+       INT16                                                                                           sGridNo;                                                        // World GridNo
+
+       LEVELNODE                                                                               *pGivenLevelNode;                       // Levelnode for existing tile ( optional )
+       const char* zCachedFile; // Filename for cached tile name ( optional )
+
+       UINT8                                                                                           ubOwner;                                                        // UBID for the owner
+       UINT8                                                                                           ubKeyFrame1;                                    // Key frame 1
+       UINT32                                                                                  uiKeyFrame1Code;                        // Key frame code
+       UINT8                                                                                           ubKeyFrame2;                                    // Key frame 2
+       UINT32                                                                                  uiKeyFrame2Code;                        // Key frame code
+
+       UINT32                                                                                  uiUserData;
+       UINT8                                                                                           ubUserData2;
+       UINT32                                                                                  uiUserData3;
+
+} ANITILE_PARAMS;
+
+
+// Explosion Data
+typedef struct
+{
+       UINT32                                                                                  uiFlags;
+
+       UINT8                                                                                           ubOwner;
+       UINT8                                                                                           ubTypeID;
+
+       UINT16                                                                                  usItem;
+
+       INT16                                                                                           sX;                                                                             // World X ( optional )
+       INT16                                                                                           sY;                                                                             // World Y ( optional )
+       INT16                                                                                           sZ;                                                                             // World Z ( optional )
+       INT16                                                                                           sGridNo;                                                        // World GridNo
+       BOOLEAN                                                                                 fLocate;
+       INT8                                                                                            bLevel;                                                         // World level
+       UINT8                                                                                           ubUnsed[1];
+} EXPLOSION_PARAMS;
+
+
+typedef struct
+{
+       EXPLOSION_PARAMS                Params;
+       BOOLEAN                                                 fAllocated;
+       INT16                                                           sCurrentFrame;
+       INT32                                                           iID;
+       INT32                                                           iLightID;
+       UINT8                                                           ubUnsed[2];
+} EXPLOSIONTYPE;
+
+
+enum
+{
+       ANI_KEYFRAME_NO_CODE,
+       ANI_KEYFRAME_BEGIN_TRANSLUCENCY,
+       ANI_KEYFRAME_BEGIN_DAMAGE,
+       ANI_KEYFRAME_CHAIN_WATER_EXPLOSION,
+  ANI_KEYFRAME_DO_SOUND,
+} KeyFrameEnums;
+
+
+// SOUNDS ENUMERATION
+enum SoundDefines
+{
+       MISS_1 = 0,
+       MISS_2,
+       MISS_3,
+       MISS_4,
+       MISS_5,
+       MISS_6,
+       MISS_7,
+       MISS_8,
+       MISS_G1,
+       MISS_G2,
+       MISS_KNIFE,
+       FALL_1,
+       FALL_2,
+       FALL_TO_GROUND_1,
+       FALL_TO_GROUND_2,
+       FALL_TO_GROUND_3,
+       HEAVY_FALL_1,
+       BODY_SPLAT_1,
+       GLASS_SHATTER1,
+       GLASS_SHATTER2,
+       DROPEN_1,
+       DROPEN_2,
+       DROPEN_3,
+       DRCLOSE_1,
+       DRCLOSE_2,
+       UNLOCK_DOOR_1,
+       KICKIN_DOOR,
+       BREAK_LOCK,
+       PICKING_LOCK,
+
+       GARAGE_DOOR_OPEN,
+       GARAGE_DOOR_CLOSE,
+       ELEVATOR_DOOR_OPEN,
+       ELEVATOR_DOOR_CLOSE,
+       HITECH_DOOR_OPEN,
+       HITECH_DOOR_CLOSE,
+       CURTAINS_OPEN,
+       CURTAINS_CLOSE,
+       METAL_DOOR_OPEN,
+       METAL_DOOR_CLOSE,
+
+       WALK_LEFT_OUT,
+       WALK_RIGHT_OUT,
+       WALK_LEFT_OUT2,
+       WALK_RIGHT_OUT2,
+       WALK_LEFT_IN,
+       WALK_RIGHT_IN,
+       WALK_LEFT_IN2,
+       WALK_RIGHT_IN2,
+       WALK_LEFT_ROAD,
+       WALK_RIGHT_ROAD,
+       WALK_LEFT_ROAD2,
+       WALK_RIGHT_ROAD2,
+       CRAWL_1,
+       CRAWL_2,
+       CRAWL_3,
+       CRAWL_4,
+       TARG_REFINE_BEEP,
+       ENDTURN_1,
+       HEADCR_1,
+       DOORCR_1,
+       HEADSPLAT_1,
+       BODY_EXPLODE_1,
+       EXPLOSION_1,
+       CROW_EXPLODE_1,
+       SMALL_EXPLODE_1,
+       HELI_1,
+       BULLET_IMPACT_1,
+       BULLET_IMPACT_2,
+       BULLET_IMPACT_3,
+       CREATURE_BATTLECRY_1,
+       ENTER_WATER_1,
+       ENTER_DEEP_WATER_1,
+
+       COW_HIT_SND,
+       COW_DIE_SND,
+
+       // ROCKET GUN COMPUTER VOICE...
+       RG_ID_IMPRINTED,
+       RG_ID_INVALID,
+       RG_TARGET_SELECTED,
+
+       // CAVE COLLAPSE
+       CAVE_COLLAPSE,
+
+       // AIR RAID SOUNDS...
+       S_RAID_WHISTLE,
+       S_RAID_AMBIENT,
+       S_RAID_DIVE,
+       S_RAID_TB_DIVE,
+       S_RAID_TB_BOMB,
+
+       // VEHICLE SOUNDS
+       S_VECH1_MOVE,
+       S_VECH1_ON,
+       S_VECH1_OFF,
+       S_VECH1_INTO,
+
+       S_DRYFIRE1,
+
+       // IMPACT SOUNDS
+       S_WOOD_IMPACT1,
+       S_WOOD_IMPACT2,
+       S_WOOD_IMPACT3,
+       S_PORCELAIN_IMPACT1,
+       S_RUBBER_IMPACT1,
+       S_STONE_IMPACT1,
+       S_WATER_IMPACT1,
+       S_VEG_IMPACT1,
+       S_METAL_IMPACT1,
+       S_METAL_IMPACT2,
+       S_METAL_IMPACT3,
+
+       S_SLAP_IMPACT,
+
+       // WEAPON RELOAD
+       S_RELOAD_REVOLVER,
+       S_RELOAD_PISTOL,
+       S_RELOAD_SMG,
+       S_RELOAD_RIFLE,
+       S_RELOAD_SHOTGUN,
+       S_RELOAD_LMG,
+
+       // WEAPON LOCKNLOAD
+       S_LNL_REVOLVER,
+       S_LNL_PISTOL,
+       S_LNL_SMG,
+       S_LNL_RIFLE,
+       S_LNL_SHOTGUN,
+       S_LNL_LMG,
+
+       //WEAPON SHOT SOUNDS
+       S_SMALL_ROCKET_LAUNCHER,
+       S_GLAUNCHER,
+       S_UNDER_GLAUNCHER,
+       S_ROCKET_LAUNCHER,
+       S_MORTAR_SHOT,
+       S_GLOCK17,
+       S_GLOCK18,
+       S_BERETTA92,
+       S_BERETTA93,
+       S_SWSPECIAL,
+       S_BARRACUDA,
+       S_DESERTEAGLE,
+       S_M1911,
+       S_MP5K,
+       S_MAC10,
+       S_THOMPSON,
+       S_COMMANDO,
+       S_MP53,
+       S_AKSU74,
+       S_P90,
+       S_TYPE85,
+       S_SKS,
+       S_DRAGUNOV,
+       S_M24,
+       S_AUG,
+       S_G41,
+       S_RUGERMINI,
+       S_C7,
+       S_FAMAS,
+       S_AK74,
+       S_AKM,
+       S_M14,
+       S_FNFAL,
+       S_G3A3,
+       S_G11,
+       S_M870,
+       S_SPAS,
+       S_CAWS,
+       S_FNMINI,
+       S_RPK74,
+       S_21E,
+       S_THROWKNIFE,
+       S_TANK_CANNON,
+       S_BURSTTYPE1,
+  S_AUTOMAG,
+
+       S_SILENCER_1,
+       S_SILENCER_2,
+
+       // SWOOSHES.
+       SWOOSH_1,
+       SWOOSH_2,
+       SWOOSH_3,
+       SWOOSH_4,
+       SWOOSH_5,
+       SWOOSH_6,
+
+       // CREATURE SOUNDS....
+       ACR_FALL_1,
+       ACR_STEP_1,
+       ACR_STEP_2,
+       ACR_SWIPE,
+       ACR_EATFLESH,
+       ACR_CRIPPLED,
+       ACR_DIE_PART1,
+       ACR_DIE_PART2,
+       ACR_LUNGE,
+       ACR_SMELL_THREAT,
+       ACR_SMEEL_PREY,
+       ACR_SPIT,
+       //BABY
+       BCR_DYING,
+       BCR_DRAGGING,
+       BCR_SHRIEK,
+       BCR_SPITTING,
+       // LARVAE
+       LCR_MOVEMENT,
+       LCR_RUPTURE,
+       // QUEEN
+       LQ_SHRIEK,
+       LQ_DYING,
+       LQ_ENRAGED_ATTACK,
+       LQ_RUPTURING,
+       LQ_CRIPPLED,
+       LQ_SMELLS_THREAT,
+       LQ_WHIP_ATTACK,
+
+       THROW_IMPACT_1,
+       THROW_IMPACT_2,
+
+       IDLE_SCRATCH,
+       IDLE_ARMPIT,
+       IDLE_BACKCRACK,
+
+       AUTORESOLVE_FINISHFX,
+
+       //Interface buttons, misc.
+       EMAIL_ALERT,
+       ENTERING_TEXT,
+       REMOVING_TEXT,
+       COMPUTER_BEEP2_IN,
+       COMPUTER_BEEP2_OUT,
+       COMPUTER_SWITCH1_IN,
+       COMPUTER_SWITCH1_OUT,
+       VSM_SWITCH1_IN,
+       VSM_SWITCH1_OUT,
+       VSM_SWITCH2_IN,
+       VSM_SWITCH2_OUT,
+       SM_SWITCH1_IN,
+       SM_SWITCH1_OUT,
+       SM_SWITCH2_IN,
+       SM_SWITCH2_OUT,
+       SM_SWITCH3_IN,
+       SM_SWITCH3_OUT,
+       BIG_SWITCH3_IN,
+       BIG_SWITCH3_OUT,
+       KLAXON_ALARM,
+       BOXING_BELL,
+       HELI_CRASH,
+       ATTACH_TO_GUN,
+       ATTACH_CERAMIC_PLATES,
+       ATTACH_DETONATOR,
+
+       GRAB_ROOF,
+       LAND_ON_ROOF,
+
+       UNSTEALTHY_OUTSIDE_1,
+       UNSTEALTHY_OUTSIDE_2,
+       UNSTEALTHY_INSIDE_1,
+
+       OPEN_DEFAULT_OPENABLE,
+       CLOSE_DEFAULT_OPENABLE,
+
+       FIRE_ON_MERC,
+       GLASS_CRACK,
+       SPIT_RICOCHET,
+
+       BLOODCAT_HIT_1,
+       BLOODCAT_DIE_1,
+       SLAP_1,
+
+       ROBOT_BEEP,
+       DOOR_ELECTRICITY,
+       SWIM_1,
+       SWIM_2,
+       KEY_FAILURE,
+       TARGET_OUT_OF_RANGE,
+  OPEN_STATUE,
+  USE_STATUE_REMOTE,
+  USE_WIRE_CUTTERS,
+  DRINK_CANTEEN_FEMALE,
+  BLOODCAT_ATTACK,
+  BLOODCAT_ROAR,
+  ROBOT_GREETING,
+  ROBOT_DEATH,
+  GAS_EXPLODE_1,
+  AIR_ESCAPING_1,
+
+  OPEN_DRAWER,
+  CLOSE_DRAWER,
+  OPEN_LOCKER,
+  CLOSE_LOCKER,
+  OPEN_WOODEN_BOX,
+  CLOSE_WOODEN_BOX,
+  ROBOT_STOP,
+
+       WATER_WALK1_IN,
+       WATER_WALK1_OUT,
+       WATER_WALK2_IN,
+       WATER_WALK2_OUT,
+
+  PRONE_UP_SOUND,
+  PRONE_DOWN_SOUND,
+  KNEEL_UP_SOUND,
+  KNEEL_DOWN_SOUND,
+  PICKING_SOMETHING_UP,
+
+  COW_FALL,
+
+  BLOODCAT_GROWL_1,
+  BLOODCAT_GROWL_2,
+  BLOODCAT_GROWL_3,
+  BLOODCAT_GROWL_4,
+  CREATURE_GAS_NOISE,
+  CREATURE_FALL_PART_2,
+  CREATURE_DISSOLVE_1,
+  QUEEN_AMBIENT_NOISE,
+  CREATURE_FALL,
+  CROW_PECKING_AT_FLESH,
+  CROW_FLYING_AWAY,
+  SLAP_2,
+  MORTAR_START,
+  MORTAR_WHISTLE,
+  MORTAR_LOAD,
+
+  TURRET_MOVE,
+  TURRET_STOP,
+  COW_FALL_2,
+  KNIFE_IMPACT,
+  EXPLOSION_ALT_BLAST_1,
+  EXPLOSION_BLAST_2,
+  DRINK_CANTEEN_MALE,
+  USE_X_RAY_MACHINE,
+  CATCH_OBJECT,
+  FENCE_OPEN,
+
+       NUM_SAMPLES
+};
+
+
+// TERRAIN ID VALUES.
+enum
+{
+       NO_TERRAIN,
+       FLAT_GROUND,
+       FLAT_FLOOR,
+       PAVED_ROAD,
+       DIRT_ROAD,
+       LOW_GRASS,
+       HIGH_GRASS,
+       TRAIN_TRACKS,
+       LOW_WATER,
+       MED_WATER,
+       DEEP_WATER,
+       NUM_TERRAIN_TYPES
+};
+
+
+enum
+{
+       NO_BLAST,
+       BLAST_1,
+       BLAST_2,
+       BLAST_3,
+       STUN_BLAST,
+       WATER_BLAST,
+  TARGAS_EXP,
+  SMOKE_EXP,
+  MUSTARD_EXP,
+
+       NUM_EXP_TYPES
+};
+
+
+CHAR8 sBlastSpeeds[] =
+{
+       0,
+       80,
+       80,
+       80,
+       20,
+       80,
+       80,
+       80,
+       80,
+};
+
+
+UINT8 ubDamageKeyFrame[NUM_EXP_TYPES] =
+{
+       0,
+       3,
+       5,
+       5,
+       5,
+       18,
+       18,
+       18,
+       18,
+};
+
+
+UINT32 uiExplosionSoundID[NUM_EXP_TYPES] =
+{
+       EXPLOSION_1,
+       EXPLOSION_1,
+       EXPLOSION_BLAST_2,  //LARGE
+       EXPLOSION_BLAST_2,
+       EXPLOSION_1,
+       AIR_ESCAPING_1,
+       AIR_ESCAPING_1,
+       AIR_ESCAPING_1,
+       AIR_ESCAPING_1,
+};
+
+
+UINT8 ubTransKeyFrame[NUM_EXP_TYPES] =
+{
+       0,
+       17,
+       28,
+       24,
+       1,
+       1,
+       1,
+       1,
+       1,
+};
+
+
+CHAR8  zBlastFilenames[][70] =
+{
+       "",
+       "TILECACHE/zgrav_d.sti",
+       "TILECACHE/zgrav_c.sti",
+       "TILECACHE/zgrav_b.sti",
+       "TILECACHE/shckwave.sti",
+       "TILECACHE/wat_exp.sti",
+       "TILECACHE/tear_exp.sti",
+       "TILECACHE/tear_exp.sti",
+       "TILECACHE/must_exp.sti",
+};
+
+
+UINT8 ubAmbientLightLevel;
+
+
+static void GenerateExplosionFromExplosionPointer(EXPLOSIONTYPE* pExplosion)
+{
+       UINT32          uiFlags;
+       UINT8                   ubOwner;
+       UINT8                   ubTypeID;
+       INT16                   sX;
+       INT16                   sY;
+       INT16                   sZ;
+       INT16                   sGridNo;
+       UINT16          usItem;
+       UINT8                   ubTerrainType;
+       INT8                    bLevel;
+  UINT32    uiSoundID;
+
+       ANITILE_PARAMS  AniParams;
+
+       // Assign param values
+       uiFlags                         = pExplosion->Params.uiFlags;
+       ubOwner                         = pExplosion->Params.ubOwner;
+       ubTypeID                        = pExplosion->Params.ubTypeID;
+       sX                                              = pExplosion->Params.sX;
+       sY                                              = pExplosion->Params.sY;
+       sZ                                              = pExplosion->Params.sZ;
+       sGridNo                         = pExplosion->Params.sGridNo;
+       usItem                          = pExplosion->Params.usItem;
+       bLevel                          = pExplosion->Params.bLevel;
+
+  // If Z value given is 0 and bLevel > 0, make z heigher
+  if ( sZ == 0 && bLevel > 0 )
+  {
+    sZ = ROOF_LEVEL_HEIGHT;
+  }
+
+       pExplosion->iLightID = -1;
+
+       // OK, if we are over water.... use water explosion...
+       ubTerrainType = GetTerrainType( sGridNo );
+
+       // Setup explosion!
+       memset( &AniParams, 0, sizeof( ANITILE_PARAMS ) );
+
+       AniParams.sGridNo                                                       = sGridNo;
+       AniParams.ubLevelID                                             = ANI_TOPMOST_LEVEL;
+       AniParams.sDelay                                                        = sBlastSpeeds[ ubTypeID ];
+       AniParams.sStartFrame                                   = pExplosion->sCurrentFrame;
+       AniParams.uiFlags                                                       = ANITILE_CACHEDTILE | ANITILE_FORWARD | ANITILE_EXPLOSION;
+
+       if ( ubTerrainType == LOW_WATER || ubTerrainType == MED_WATER || ubTerrainType == DEEP_WATER )
+       {
+               // Change type to water explosion...
+               ubTypeID = WATER_BLAST;
+               AniParams.uiFlags                                               |= ANITILE_ALWAYS_TRANSLUCENT;
+       }
+
+
+       if ( sZ < WALL_HEIGHT )
+       {
+               AniParams.uiFlags |= ANITILE_NOZBLITTER;
+       }
+
+       if ( uiFlags & EXPLOSION_FLAG_USEABSPOS )
+       {
+               AniParams.sX                                                                    = sX;
+               AniParams.sY                                                                    = sY;
+               AniParams.sZ                                                                    = sZ;
+
+               //AniParams.uiFlags                                                     |= ANITILE_USEABSOLUTEPOS;
+       }
+
+       AniParams.ubKeyFrame1                                   = ubTransKeyFrame[ ubTypeID ];
+       AniParams.uiKeyFrame1Code                       = ANI_KEYFRAME_BEGIN_TRANSLUCENCY;
+
+       if ( !( uiFlags & EXPLOSION_FLAG_DISPLAYONLY ) )
+       {
+               AniParams.ubKeyFrame2                                   = ubDamageKeyFrame[ ubTypeID ];
+               AniParams.uiKeyFrame2Code                       = ANI_KEYFRAME_BEGIN_DAMAGE;
+       }
+       AniParams.uiUserData                                    = usItem;
+       AniParams.ubUserData2                                   = ubOwner;
+       AniParams.uiUserData3                                   = pExplosion->iID;
+       AniParams.zCachedFile = zBlastFilenames[ubTypeID];
+       CreateAnimationTile( &AniParams );
+
+       //  set light source....
+       if ( pExplosion->iLightID == -1 )
+       {
+               // DO ONLY IF WE'RE AT A GOOD LEVEL
+               if ( ubAmbientLightLevel >= MIN_AMB_LEVEL_FOR_MERC_LIGHTS )
+               {
+                       if( ( pExplosion->iLightID = LightSpriteCreate("L-R04.LHT", 0 ) ) != (-1) )
+                       {
+                               LightSpritePower( pExplosion->iLightID, TRUE );
+
+                               LightSpritePosition( pExplosion->iLightID, (INT16)(sX/CELL_X_SIZE), (INT16)(sY/CELL_Y_SIZE) );
+                       }
+               }
+       }
+
+  uiSoundID = uiExplosionSoundID[ ubTypeID ];
+
+  if ( uiSoundID == EXPLOSION_1 )
+  {
+      // Randomize
+     if ( Random( 2 ) == 0 )
+     {
+      uiSoundID = EXPLOSION_ALT_BLAST_1;
+     }
+  }
+
+       PlayJA2Sample(uiSoundID, SoundVolume(HIGHVOLUME, sGridNo), 1, SoundDir(sGridNo));
+}
+
+
+void f(void)
+{
+       GenerateExplosionFromExplosionPointer(0);
+}
+
+
+int main(void)
+{
+       return 0;
+}