int data_organizational_parameters_valid(int B, int A, int C, int Ndwl,
                                         int Ndbl, double Nspd, char assoc,
                                         double NSubbanks) {
  int temp = 0;
  double before = 0.0;
  int tagbits = 0;
  int data_rows = 0, data_columns = 0, tag_rows = 0, tag_columns = 0;
  if (assoc == 0) {
    if (Ndwl * Ndbl > 256) {
      return (0);
    }
    if (C / (B * A * Ndbl * Nspd) <= 0) {
      return (0);
    }
    if ((8 * B * A * Nspd / Ndwl) <= 0) {
      return (0);
    }
    data_rows = (int)(C / (B * A * Ndbl * Nspd) + 0.5);
    if (8 > data_rows) {
      return (0);
    }
    if (2048 < data_rows) {
      return (0);
    }
    data_columns = (int)(8 * B * A * Nspd / Ndwl + 0.5);
    if (16 > data_columns) {
      return (0);
    }
    if (512 < data_columns) {
      return (0);
    }
  } else {
    if (C / (2 * B * Ndbl) <= 0) {
      return (0);
    }
    if (Ndbl > 32) {
      return (0);
    }
  }
  return (1);
}


x86 assembly (clang, -O0):
<data_organizational_parameters_valid>:
push   %rbp
mov    %rsp,%rbp
mov    %r9b,%al
mov    %edi,-0x8(%rbp)
mov    %esi,-0xc(%rbp)
mov    %edx,-0x10(%rbp)
mov    %ecx,-0x14(%rbp)
mov    %r8d,-0x18(%rbp)
movsd  %xmm0,-0x20(%rbp)
mov    %al,-0x21(%rbp)
movsd  %xmm1,-0x30(%rbp)
movl   $0x0,-0x34(%rbp)
xorps  %xmm0,%xmm0
movsd  %xmm0,-0x40(%rbp)
movl   $0x0,-0x44(%rbp)
movl   $0x0,-0x48(%rbp)
movl   $0x0,-0x4c(%rbp)
movl   $0x0,-0x50(%rbp)
movl   $0x0,-0x54(%rbp)
movsbl -0x21(%rbp),%eax
cmp    $0x0,%eax
jne    12b8 <data_organizational_parameters_valid+0x1b8>
mov    -0x14(%rbp),%eax
imul   -0x18(%rbp),%eax
cmp    $0x100,%eax
jle    1181 <data_organizational_parameters_valid+0x81>
movl   $0x0,-0x4(%rbp)
jmp    12ff <data_organizational_parameters_valid+0x1ff>
cvtsi2sdl -0x10(%rbp),%xmm1
mov    -0x8(%rbp),%eax
imul   -0xc(%rbp),%eax
imul   -0x18(%rbp),%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x20(%rbp),%xmm0
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     11b7 <data_organizational_parameters_valid+0xb7>
movl   $0x0,-0x4(%rbp)
jmp    12ff <data_organizational_parameters_valid+0x1ff>
mov    -0x8(%rbp),%eax
shl    $0x3,%eax
imul   -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  -0x20(%rbp),%xmm1
cvtsi2sdl -0x14(%rbp),%xmm0
divsd  %xmm0,%xmm1
xorps  %xmm0,%xmm0
ucomisd %xmm1,%xmm0
jb     11ec <data_organizational_parameters_valid+0xec>
movl   $0x0,-0x4(%rbp)
jmp    12ff <data_organizational_parameters_valid+0x1ff>
cvtsi2sdl -0x10(%rbp),%xmm0
mov    -0x8(%rbp),%eax
imul   -0xc(%rbp),%eax
imul   -0x18(%rbp),%eax
cvtsi2sd %eax,%xmm1
mulsd  -0x20(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xdef(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x48(%rbp)
mov    $0x8,%eax
cmp    -0x48(%rbp),%eax
jle    1236 <data_organizational_parameters_valid+0x136>
movl   $0x0,-0x4(%rbp)
jmp    12ff <data_organizational_parameters_valid+0x1ff>
mov    $0x800,%eax
cmp    -0x48(%rbp),%eax
jge    1250 <data_organizational_parameters_valid+0x150>
movl   $0x0,-0x4(%rbp)
jmp    12ff <data_organizational_parameters_valid+0x1ff>
mov    -0x8(%rbp),%eax
shl    $0x3,%eax
imul   -0xc(%rbp),%eax
cvtsi2sd %eax,%xmm0
mulsd  -0x20(%rbp),%xmm0
cvtsi2sdl -0x14(%rbp),%xmm1
divsd  %xmm1,%xmm0
movsd  0xd8c(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%eax
mov    %eax,-0x4c(%rbp)
mov    $0x10,%eax
cmp    -0x4c(%rbp),%eax
jle    1299 <data_organizational_parameters_valid+0x199>
movl   $0x0,-0x4(%rbp)
jmp    12ff <data_organizational_parameters_valid+0x1ff>
mov    $0x200,%eax
cmp    -0x4c(%rbp),%eax
jge    12b3 <data_organizational_parameters_valid+0x1b3>
movl   $0x0,-0x4(%rbp)
jmp    12ff <data_organizational_parameters_valid+0x1ff>
jmp    12f8 <data_organizational_parameters_valid+0x1f8>
mov    -0x10(%rbp),%eax
mov    -0x8(%rbp),%ecx
shl    $0x1,%ecx
imul   -0x18(%rbp),%ecx
cltd
idiv   %ecx
cmp    $0x0,%eax
jg     12dd <data_organizational_parameters_valid+0x1dd>
movl   $0x0,-0x4(%rbp)
jmp    12ff <data_organizational_parameters_valid+0x1ff>
cmpl   $0x20,-0x18(%rbp)
jle    12f3 <data_organizational_parameters_valid+0x1f3>
movl   $0x0,-0x4(%rbp)
jmp    12ff <data_organizational_parameters_valid+0x1ff>
jmp    12f8 <data_organizational_parameters_valid+0x1f8>
movl   $0x1,-0x4(%rbp)
mov    -0x4(%rbp),%eax
pop    %rbp
ret

x86 assembly (clang, -O2):
<data_organizational_parameters_valid>:
test   %r9b,%r9b
je     1130 <data_organizational_parameters_valid+0x30>
imul   %r8d,%edi
add    %edi,%edi
mov    %edx,%eax
cltd
idiv   %edi
mov    %eax,%ecx
xor    %eax,%eax
cmp    $0x20,%r8d
jg     11b8 <data_organizational_parameters_valid+0xb8>
test   %ecx,%ecx
jle    11b8 <data_organizational_parameters_valid+0xb8>
mov    $0x1,%eax
jmp    11b8 <data_organizational_parameters_valid+0xb8>
mov    %r8d,%r9d
imul   %ecx,%r9d
xor    %eax,%eax
cmp    $0x100,%r9d
jg     11b8 <data_organizational_parameters_valid+0xb8>
cvtsi2sd %edx,%xmm1
imul   %edi,%esi
imul   %esi,%r8d
cvtsi2sd %r8d,%xmm2
mulsd  %xmm0,%xmm2
divsd  %xmm2,%xmm1
xorpd  %xmm3,%xmm3
ucomisd %xmm1,%xmm3
jae    11b8 <data_organizational_parameters_valid+0xb8>
shl    $0x3,%esi
xorps  %xmm2,%xmm2
cvtsi2sd %esi,%xmm2
cvtsi2sd %ecx,%xmm4
mulsd  %xmm0,%xmm2
divsd  %xmm4,%xmm2
ucomisd %xmm2,%xmm3
jae    11b8 <data_organizational_parameters_valid+0xb8>
addsd  0xe78(%rip),%xmm1
cvttsd2si %xmm1,%ecx
add    $0xfffff7ff,%ecx
cmp    $0xfffff807,%ecx
jb     11b8 <data_organizational_parameters_valid+0xb8>
addsd  0xe5e(%rip),%xmm2
cvttsd2si %xmm2,%ecx
add    $0xfffffdff,%ecx
cmp    $0xfffffe0f,%ecx
jae    1126 <data_organizational_parameters_valid+0x26>
ret

LLVM IR (-O0):
define i32 @data_organizational_parameters_valid(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, double %5, i8 signext %6, double %7) {
%9 = alloca i32
%10 = alloca i32
%11 = alloca i32
%12 = alloca i32
%13 = alloca i32
%14 = alloca i32
%15 = alloca double
%16 = alloca i8
%17 = alloca double
%18 = alloca i32
%19 = alloca double
%20 = alloca i32
%21 = alloca i32
%22 = alloca i32
%23 = alloca i32
%24 = alloca i32
store i32 %0, i32* %10
store i32 %1, i32* %11
store i32 %2, i32* %12
store i32 %3, i32* %13
store i32 %4, i32* %14
store double %5, double* %15
store i8 %6, i8* %16
store double %7, double* %17
store i32 0, i32* %18
store double 0.000000e+00, double* %19
store i32 0, i32* %20
store i32 0, i32* %21
store i32 0, i32* %22
store i32 0, i32* %23
store i32 0, i32* %24
%25 = load i8, i8* %16
%26 = sext i8 %25 to i32
%27 = icmp eq i32 %26, 0
br i1 %27, label %28, label %103
28: ; preds = %8
%29 = load i32, i32* %13
%30 = load i32, i32* %14
%31 = mul nsw i32 %29, %30
%32 = icmp sgt i32 %31, 256
br i1 %32, label %33, label %34
33: ; preds = %28
store i32 0, i32* %9
br label %118
34: ; preds = %28
%35 = load i32, i32* %12
%36 = sitofp i32 %35 to double
%37 = load i32, i32* %10
%38 = load i32, i32* %11
%39 = mul nsw i32 %37, %38
%40 = load i32, i32* %14
%41 = mul nsw i32 %39, %40
%42 = sitofp i32 %41 to double
%43 = load double, double* %15
%44 = fmul double %42, %43
%45 = fdiv double %36, %44
%46 = fcmp ole double %45, 0.000000e+00
br i1 %46, label %47, label %48
47: ; preds = %34
store i32 0, i32* %9
br label %118
48: ; preds = %34
%49 = load i32, i32* %10
%50 = mul nsw i32 8, %49
%51 = load i32, i32* %11
%52 = mul nsw i32 %50, %51
%53 = sitofp i32 %52 to double
%54 = load double, double* %15
%55 = fmul double %53, %54
%56 = load i32, i32* %13
%57 = sitofp i32 %56 to double
%58 = fdiv double %55, %57
%59 = fcmp ole double %58, 0.000000e+00
br i1 %59, label %60, label %61
60: ; preds = %48
store i32 0, i32* %9
br label %118
61: ; preds = %48
%62 = load i32, i32* %12
%63 = sitofp i32 %62 to double
%64 = load i32, i32* %10
%65 = load i32, i32* %11
%66 = mul nsw i32 %64, %65
%67 = load i32, i32* %14
%68 = mul nsw i32 %66, %67
%69 = sitofp i32 %68 to double
%70 = load double, double* %15
%71 = fmul double %69, %70
%72 = fdiv double %63, %71
%73 = fadd double %72, 5.000000e-01
%74 = fptosi double %73 to i32
store i32 %74, i32* %21
%75 = load i32, i32* %21
%76 = icmp sgt i32 8, %75
br i1 %76, label %77, label %78
77: ; preds = %61
store i32 0, i32* %9
br label %118
78: ; preds = %61
%79 = load i32, i32* %21
%80 = icmp slt i32 2048, %79
br i1 %80, label %81, label %82
81: ; preds = %78
store i32 0, i32* %9
br label %118
82: ; preds = %78
%83 = load i32, i32* %10
%84 = mul nsw i32 8, %83
%85 = load i32, i32* %11
%86 = mul nsw i32 %84, %85
%87 = sitofp i32 %86 to double
%88 = load double, double* %15
%89 = fmul double %87, %88
%90 = load i32, i32* %13
%91 = sitofp i32 %90 to double
%92 = fdiv double %89, %91
%93 = fadd double %92, 5.000000e-01
%94 = fptosi double %93 to i32
store i32 %94, i32* %22
%95 = load i32, i32* %22
%96 = icmp sgt i32 16, %95
br i1 %96, label %97, label %98
97: ; preds = %82
store i32 0, i32* %9
br label %118
98: ; preds = %82
%99 = load i32, i32* %22
%100 = icmp slt i32 512, %99
br i1 %100, label %101, label %102
101: ; preds = %98
store i32 0, i32* %9
br label %118
102: ; preds = %98
br label %117
103: ; preds = %8
%104 = load i32, i32* %12
%105 = load i32, i32* %10
%106 = mul nsw i32 2, %105
%107 = load i32, i32* %14
%108 = mul nsw i32 %106, %107
%109 = sdiv i32 %104, %108
%110 = icmp sle i32 %109, 0
br i1 %110, label %111, label %112
111: ; preds = %103
store i32 0, i32* %9
br label %118
112: ; preds = %103
%113 = load i32, i32* %14
%114 = icmp sgt i32 %113, 32
br i1 %114, label %115, label %116
115: ; preds = %112
store i32 0, i32* %9
br label %118
116: ; preds = %112
br label %117
117: ; preds = %116, %102
store i32 1, i32* %9
br label %118
118: ; preds = %117, %115, %111, %101, %97, %81, %77, %60, %47, %33
%119 = load i32, i32* %9
ret i32 %119
}

LLVM IR (-O2):
define i32 @data_organizational_parameters_valid(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, double %5, i8 signext %6, double %7) {
%9 = icmp eq i8 %6, 0
br i1 %9, label %10, label %39
10: ; preds = %8
%11 = mul nsw i32 %4, %3
%12 = icmp sgt i32 %11, 256
br i1 %12, label %47, label %13
13: ; preds = %10
%14 = sitofp i32 %2 to double
%15 = mul nsw i32 %1, %0
%16 = mul nsw i32 %15, %4
%17 = sitofp i32 %16 to double
%18 = fmul double %17, %5
%19 = fdiv double %14, %18
%20 = fcmp ugt double %19, 0.000000e+00
br i1 %20, label %21, label %47
21: ; preds = %13
%22 = shl nsw i32 %0, 3
%23 = mul nsw i32 %22, %1
%24 = sitofp i32 %23 to double
%25 = fmul double %24, %5
%26 = sitofp i32 %3 to double
%27 = fdiv double %25, %26
%28 = fcmp ugt double %27, 0.000000e+00
br i1 %28, label %29, label %47
29: ; preds = %21
%30 = fadd double %19, 5.000000e-01
%31 = fptosi double %30 to i32
%32 = add i32 %31, -2049
%33 = icmp ult i32 %32, -2041
br i1 %33, label %47, label %34
34: ; preds = %29
%35 = fadd double %27, 5.000000e-01
%36 = fptosi double %35 to i32
%37 = add i32 %36, -513
%38 = icmp ult i32 %37, -497
br i1 %38, label %47, label %46
39: ; preds = %8
%40 = shl nsw i32 %0, 1
%41 = mul nsw i32 %40, %4
%42 = sdiv i32 %2, %41
%43 = icmp slt i32 %42, 1
%44 = icmp sgt i32 %4, 32
%45 = or i1 %44, %43
br i1 %45, label %47, label %46
46: ; preds = %39, %34
br label %47
47: ; preds = %39, %34, %29, %21, %13, %10, %46
%48 = phi i32 [ 1, %46 ], [ 0, %10 ], [ 0, %13 ], [ 0, %21 ], [ 0, %29 ], [ 0, %34 ], [ 0, %39 ]
ret i32 %48
}