long mf_sec2ticks(secs, division, tempo)
float secs;
int division;
long tempo;
{
  long ticks;
  float smpte_format, smpte_resolution;
  if (division > 0) {
    ticks = (long)((secs * ((float)(division)) * 1000000.0) / ((float)(tempo)) +
                   0.5);
  } else {
    smpte_format = ((unsigned char)((division & 0xff00) >> 8));
    smpte_resolution = ((unsigned char)(division & 0xff));
    ticks = (long)(secs * smpte_format * smpte_resolution * 1000000.0 + 0.5);
  };
  return (ticks);
}


x86 assembly (clang, -O0):
<mf_sec2ticks>:
push   %rbp
mov    %rsp,%rbp
cvtsd2ss %xmm0,%xmm0
movss  %xmm0,-0x4(%rbp)
mov    %edi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
cmpl   $0x0,-0x8(%rbp)
jle    1164 <mf_sec2ticks+0x64>
movss  -0x4(%rbp),%xmm0
cvtsi2ssl -0x8(%rbp),%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xec8(%rip),%xmm1
mulsd  %xmm1,%xmm0
cvtsi2ssq -0x10(%rbp),%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
movsd  0xeb6(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x18(%rbp)
jmp    11b2 <mf_sec2ticks+0xb2>
movzbl -0x7(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x1c(%rbp)
movzbl -0x8(%rbp),%eax
cvtsi2ss %eax,%xmm0
movss  %xmm0,-0x20(%rbp)
movss  -0x4(%rbp),%xmm0
mulss  -0x1c(%rbp),%xmm0
mulss  -0x20(%rbp),%xmm0
cvtss2sd %xmm0,%xmm0
movsd  0xe67(%rip),%xmm1
mulsd  %xmm1,%xmm0
movsd  0xe63(%rip),%xmm1
addsd  %xmm1,%xmm0
cvttsd2si %xmm0,%rax
mov    %rax,-0x18(%rbp)
mov    -0x18(%rbp),%rax
pop    %rbp
ret

x86 assembly (clang, -O2):
<mf_sec2ticks>:
mov    %edi,%eax
cvtsd2ss %xmm0,%xmm0
test   %edi,%edi
jle    1130 <mf_sec2ticks+0x30>
cvtsi2ss %eax,%xmm1
mulss  %xmm1,%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0xee2(%rip),%xmm0
xorps  %xmm1,%xmm1
cvtsi2ss %rsi,%xmm1
cvtss2sd %xmm1,%xmm1
divsd  %xmm1,%xmm0
jmp    1152 <mf_sec2ticks+0x52>
movzbl %ah,%ecx
cvtsi2ss %ecx,%xmm1
movzbl %al,%eax
cvtsi2ss %eax,%xmm2
mulss  %xmm1,%xmm0
mulss  %xmm2,%xmm0
cvtss2sd %xmm0,%xmm0
mulsd  0xeae(%rip),%xmm0
addsd  0xeae(%rip),%xmm0
cvttsd2si %xmm0,%rax
ret

LLVM IR (-O0):
define i64 @mf_sec2ticks(double %0, i32 %1, i64 %2) {
%4 = alloca float
%5 = alloca i32
%6 = alloca i64
%7 = alloca i64
%8 = alloca float
%9 = alloca float
%10 = fptrunc double %0 to float
store float %10, float* %4
store i32 %1, i32* %5
store i64 %2, i64* %6
%11 = load i32, i32* %5
%12 = icmp sgt i32 %11, 0
br i1 %12, label %13, label %26
13: ; preds = %3
%14 = load float, float* %4
%15 = load i32, i32* %5
%16 = sitofp i32 %15 to float
%17 = fmul float %14, %16
%18 = fpext float %17 to double
%19 = fmul double %18, 1.000000e+06
%20 = load i64, i64* %6
%21 = sitofp i64 %20 to float
%22 = fpext float %21 to double
%23 = fdiv double %19, %22
%24 = fadd double %23, 5.000000e-01
%25 = fptosi double %24 to i64
store i64 %25, i64* %7
br label %44
26: ; preds = %3
%27 = load i32, i32* %5
%28 = and i32 %27, 65280
%29 = ashr i32 %28, 8
%30 = trunc i32 %29 to i8
%31 = uitofp i8 %30 to float
store float %31, float* %8
%32 = load i32, i32* %5
%33 = and i32 %32, 255
%34 = trunc i32 %33 to i8
%35 = uitofp i8 %34 to float
store float %35, float* %9
%36 = load float, float* %4
%37 = load float, float* %8
%38 = fmul float %36, %37
%39 = load float, float* %9
%40 = fmul float %38, %39
%41 = fpext float %40 to double
%42 = call double @llvm.fmuladd.f64(double %41, double 1.000000e+06, double 5.000000e-01)
%43 = fptosi double %42 to i64
store i64 %43, i64* %7
br label %44
44: ; preds = %26, %13
%45 = load i64, i64* %7
ret i64 %45
}

LLVM IR (-O2):
define i64 @mf_sec2ticks(double %0, i32 %1, i64 %2) {
%4 = fptrunc double %0 to float
%5 = icmp sgt i32 %1, 0
br i1 %5, label %6, label %15
6: ; preds = %3
%7 = sitofp i32 %1 to float
%8 = fmul float %4, %7
%9 = fpext float %8 to double
%10 = fmul double %9, 1.000000e+06
%11 = sitofp i64 %2 to float
%12 = fpext float %11 to double
%13 = fdiv double %10, %12
%14 = fadd double %13, 5.000000e-01
br label %25
15: ; preds = %3
%16 = lshr i32 %1, 8
%17 = trunc i32 %16 to i8
%18 = uitofp i8 %17 to float
%19 = trunc i32 %1 to i8
%20 = uitofp i8 %19 to float
%21 = fmul float %4, %18
%22 = fmul float %21, %20
%23 = fpext float %22 to double
%24 = tail call double @llvm.fmuladd.f64(double %23, double 1.000000e+06, double 5.000000e-01)
br label %25
25: ; preds = %15, %6
%26 = phi double [ %14, %6 ], [ %24, %15 ]
%27 = fptosi double %26 to i64
ret i64 %27
}