void vp8_short_idct4x4llm_1_c(short *input, short *output, int pitch) {
  int i;
  int a1;
  short *op = output;
  int shortpitch = pitch >> 1;
  a1 = ((input[0] + 4) >> 3);
  for (i = 0; i < 4; i++) {
    op[0] = a1;
    op[1] = a1;
    op[2] = a1;
    op[3] = a1;
    op += shortpitch;
  }
}


x86 assembly (clang, -O0):
<vp8_short_idct4x4llm_1_c>:
push   %rbp
mov    %rsp,%rbp
mov    %rdi,-0x8(%rbp)
mov    %rsi,-0x10(%rbp)
mov    %edx,-0x14(%rbp)
mov    -0x10(%rbp),%rax
mov    %rax,-0x28(%rbp)
mov    -0x14(%rbp),%eax
sar    $0x1,%eax
mov    %eax,-0x2c(%rbp)
mov    -0x8(%rbp),%rax
movswl (%rax),%eax
add    $0x4,%eax
sar    $0x3,%eax
mov    %eax,-0x1c(%rbp)
movl   $0x0,-0x18(%rbp)
cmpl   $0x4,-0x18(%rbp)
jge    119b <vp8_short_idct4x4llm_1_c+0x9b>
mov    -0x1c(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,(%rax)
mov    -0x1c(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,0x2(%rax)
mov    -0x1c(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,0x4(%rax)
mov    -0x1c(%rbp),%eax
mov    %ax,%cx
mov    -0x28(%rbp),%rax
mov    %cx,0x6(%rax)
mov    -0x2c(%rbp),%ecx
mov    -0x28(%rbp),%rax
movslq %ecx,%rcx
shl    $0x1,%rcx
add    %rcx,%rax
mov    %rax,-0x28(%rbp)
mov    -0x18(%rbp),%eax
add    $0x1,%eax
mov    %eax,-0x18(%rbp)
jmp    1137 <vp8_short_idct4x4llm_1_c+0x37>
pop    %rbp
ret

x86 assembly (clang, -O2):
<vp8_short_idct4x4llm_1_c>:
sar    %edx
movswl (%rdi),%eax
add    $0x4,%eax
shr    $0x3,%eax
movslq %edx,%rcx
movd   %eax,%xmm0
pshuflw $0x0,%xmm0,%xmm0
movq   %xmm0,(%rsi)
lea    (%rsi,%rcx,2),%rax
movq   %xmm0,(%rsi,%rcx,2)
lea    (%rax,%rcx,2),%rdx
movq   %xmm0,(%rax,%rcx,2)
movq   %xmm0,(%rdx,%rcx,2)
ret

LLVM IR (-O0):
define void @vp8_short_idct4x4llm_1_c(i16* %0, i16* %1, i32 %2) {
%4 = alloca i16*
%5 = alloca i16*
%6 = alloca i32
%7 = alloca i32
%8 = alloca i32
%9 = alloca i16*
%10 = alloca i32
store i16* %0, i16** %4
store i16* %1, i16** %5
store i32 %2, i32* %6
%11 = load i16*, i16** %5
store i16* %11, i16** %9
%12 = load i32, i32* %6
%13 = ashr i32 %12, 1
store i32 %13, i32* %10
%14 = load i16*, i16** %4
%15 = getelementptr inbounds i16, i16* %14, i64 0
%16 = load i16, i16* %15
%17 = sext i16 %16 to i32
%18 = add nsw i32 %17, 4
%19 = ashr i32 %18, 3
store i32 %19, i32* %8
store i32 0, i32* %7
br label %20
20: ; preds = %44, %3
%21 = load i32, i32* %7
%22 = icmp slt i32 %21, 4
br i1 %22, label %23, label %47
23: ; preds = %20
%24 = load i32, i32* %8
%25 = trunc i32 %24 to i16
%26 = load i16*, i16** %9
%27 = getelementptr inbounds i16, i16* %26, i64 0
store i16 %25, i16* %27
%28 = load i32, i32* %8
%29 = trunc i32 %28 to i16
%30 = load i16*, i16** %9
%31 = getelementptr inbounds i16, i16* %30, i64 1
store i16 %29, i16* %31
%32 = load i32, i32* %8
%33 = trunc i32 %32 to i16
%34 = load i16*, i16** %9
%35 = getelementptr inbounds i16, i16* %34, i64 2
store i16 %33, i16* %35
%36 = load i32, i32* %8
%37 = trunc i32 %36 to i16
%38 = load i16*, i16** %9
%39 = getelementptr inbounds i16, i16* %38, i64 3
store i16 %37, i16* %39
%40 = load i32, i32* %10
%41 = load i16*, i16** %9
%42 = sext i32 %40 to i64
%43 = getelementptr inbounds i16, i16* %41, i64 %42
store i16* %43, i16** %9
br label %44
44: ; preds = %23
%45 = load i32, i32* %7
%46 = add nsw i32 %45, 1
store i32 %46, i32* %7
br label %20
47: ; preds = %20
ret void
}

LLVM IR (-O2):
define void @vp8_short_idct4x4llm_1_c(i16* nocapture %0, i16* nocapture writeonly %1, i32 %2) {
%4 = ashr i32 %2, 1
%5 = load i16, i16* %0
%6 = sext i16 %5 to i32
%7 = add nsw i32 %6, 4
%8 = ashr i32 %7, 3
%9 = trunc i32 %8 to i16
%10 = sext i32 %4 to i64
%11 = insertelement <4 x i16> poison, i16 %9, i64 0
%12 = shufflevector <4 x i16> %11, <4 x i16> poison, <4 x i32> zeroinitializer
%13 = bitcast i16* %1 to <4 x i16>*
store <4 x i16> %12, <4 x i16>* %13
%14 = getelementptr inbounds i16, i16* %1, i64 %10
%15 = bitcast i16* %14 to <4 x i16>*
store <4 x i16> %12, <4 x i16>* %15
%16 = getelementptr inbounds i16, i16* %14, i64 %10
%17 = bitcast i16* %16 to <4 x i16>*
store <4 x i16> %12, <4 x i16>* %17
%18 = getelementptr inbounds i16, i16* %16, i64 %10
%19 = bitcast i16* %18 to <4 x i16>*
store <4 x i16> %12, <4 x i16>* %19
ret void
}