/* { dg-require-effective-target stdint_types } */

#include <stdint.h>
#include <string.h>
#include <stdlib.h>

void f883b (int8_t * result,
    int16_t * __restrict arg1,
    uint32_t * __restrict arg2,
    uint64_t * __restrict arg3,
    uint8_t * __restrict arg4)
{
    int idx;
    for (idx=0;idx<96;idx += 1) {
	result[idx] = (((((((((((-27 + 2+1)>>1) || arg4[idx]) < arg1[idx])
				? (((-27 + 2+1)>>1) || arg4[idx])
				: arg1[idx])
			       >> (arg2[idx] & 31)) ^ 1) - -32)>>7) | -5) & arg3[idx]);
    }
}

int8_t result[96];
int16_t arg1[96];
uint32_t arg2[96];
uint64_t arg3[96];
uint8_t arg4[96];

int main (void) 
{
  int i;
  int correct[] = {0x0,0x1,0x2,0x3,0x0,0x1,0x2,0x3,0x8,0x9,0xa,0xb,0x8,0x9,
                   0xa,0xb,0x10,0x11,0x12,0x13,0x10,0x11,0x12,0x13,
                   0x18,0x19,0x1a,0x1b,0x18,0x19,0x1a,0x1b,0x20,0x21,0x22,
                   0x23,0x20,0x21,0x22,0x23,0x28,0x29,0x2a,
                   0x2b,0x28,0x29,0x2a,0x2b,0x30,0x31,0x32,0x33,
                   0x30,0x31,0x32,0x33,0x38,0x39,0x3a,0x3b,0x38,0x39,0x3a,
                   0x3b,0x40,0x41,0x42,0x43,0x40,0x41,0x42,0x43,0x48,0x49,
                   0x4a,0x4b,0x48,0x49,0x4a,0x4b,0x50,0x51,
                   0x52,0x53,0x50,0x51,0x52,0x53,0x58,0x59,0x5a,0x5b,
                   0x58,0x59,0x5a,0x5b};

  for (i=0; i < 96; i++)
    arg3[i] = arg2[i] = arg1[i] = arg4[i] = i;

  f883b(result, arg1, arg2, arg3, arg4);

  for (i=0; i < 96; i++)
    if (result[i] != correct[i]) abort();

  return 0;
}
