; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 ; RUN: llc < %s -mtriple=sparc -mcpu=v9 | FileCheck %s --check-prefix=SPARC32 ; RUN: llc < %s -mtriple=sparcel -mcpu=v9 | FileCheck %s --check-prefix=SPARCEL ; RUN: llc < %s -mtriple=sparc64 -mcpu=v9 | FileCheck %s --check-prefix=SPARC64 declare i16 @llvm.bswap.i16(i16) declare i32 @llvm.bswap.i32(i32) declare i64 @llvm.bswap.i64(i64) define i16 @u16_bswap(i16 %0) #0 { ; SPARC32-LABEL: u16_bswap: ; SPARC32: ! %bb.0: ; SPARC32-NEXT: sethi 63, %o1 ; SPARC32-NEXT: or %o1, 768, %o1 ; SPARC32-NEXT: and %o0, %o1, %o1 ; SPARC32-NEXT: srl %o1, 8, %o1 ; SPARC32-NEXT: sll %o0, 8, %o0 ; SPARC32-NEXT: retl ; SPARC32-NEXT: or %o0, %o1, %o0 ; ; SPARCEL-LABEL: u16_bswap: ; SPARCEL: ! %bb.0: ; SPARCEL-NEXT: sethi 63, %o1 ; SPARCEL-NEXT: or %o1, 768, %o1 ; SPARCEL-NEXT: and %o0, %o1, %o1 ; SPARCEL-NEXT: srl %o1, 8, %o1 ; SPARCEL-NEXT: sll %o0, 8, %o0 ; SPARCEL-NEXT: retl ; SPARCEL-NEXT: or %o0, %o1, %o0 ; ; SPARC64-LABEL: u16_bswap: ; SPARC64: ! %bb.0: ; SPARC64-NEXT: sethi 63, %o1 ; SPARC64-NEXT: or %o1, 768, %o1 ; SPARC64-NEXT: and %o0, %o1, %o1 ; SPARC64-NEXT: srl %o1, 8, %o1 ; SPARC64-NEXT: sll %o0, 8, %o0 ; SPARC64-NEXT: retl ; SPARC64-NEXT: or %o0, %o1, %o0 %2 = tail call i16 @llvm.bswap.i16(i16 %0) ret i16 %2 } define i32 @u32_bswap(i32 %0) #0 { ; SPARC32-LABEL: u32_bswap: ; SPARC32: ! %bb.0: ; SPARC32-NEXT: srl %o0, 8, %o1 ; SPARC32-NEXT: sethi 63, %o2 ; SPARC32-NEXT: or %o2, 768, %o2 ; SPARC32-NEXT: and %o1, %o2, %o1 ; SPARC32-NEXT: srl %o0, 24, %o3 ; SPARC32-NEXT: or %o1, %o3, %o1 ; SPARC32-NEXT: and %o0, %o2, %o2 ; SPARC32-NEXT: sll %o2, 8, %o2 ; SPARC32-NEXT: sll %o0, 24, %o0 ; SPARC32-NEXT: or %o0, %o2, %o0 ; SPARC32-NEXT: retl ; SPARC32-NEXT: or %o0, %o1, %o0 ; ; SPARCEL-LABEL: u32_bswap: ; SPARCEL: ! %bb.0: ; SPARCEL-NEXT: srl %o0, 8, %o1 ; SPARCEL-NEXT: sethi 63, %o2 ; SPARCEL-NEXT: or %o2, 768, %o2 ; SPARCEL-NEXT: and %o1, %o2, %o1 ; SPARCEL-NEXT: srl %o0, 24, %o3 ; SPARCEL-NEXT: or %o1, %o3, %o1 ; SPARCEL-NEXT: and %o0, %o2, %o2 ; SPARCEL-NEXT: sll %o2, 8, %o2 ; SPARCEL-NEXT: sll %o0, 24, %o0 ; SPARCEL-NEXT: or %o0, %o2, %o0 ; SPARCEL-NEXT: retl ; SPARCEL-NEXT: or %o0, %o1, %o0 ; ; SPARC64-LABEL: u32_bswap: ; SPARC64: ! %bb.0: ; SPARC64-NEXT: srl %o0, 8, %o1 ; SPARC64-NEXT: sethi 63, %o2 ; SPARC64-NEXT: or %o2, 768, %o2 ; SPARC64-NEXT: and %o1, %o2, %o1 ; SPARC64-NEXT: srl %o0, 24, %o3 ; SPARC64-NEXT: or %o1, %o3, %o1 ; SPARC64-NEXT: and %o0, %o2, %o2 ; SPARC64-NEXT: sll %o2, 8, %o2 ; SPARC64-NEXT: sll %o0, 24, %o0 ; SPARC64-NEXT: or %o0, %o2, %o0 ; SPARC64-NEXT: retl ; SPARC64-NEXT: or %o0, %o1, %o0 %2 = tail call i32 @llvm.bswap.i32(i32 %0) ret i32 %2 } define i64 @u64_bswap(i64 %0) #0 { ; SPARC32-LABEL: u64_bswap: ; SPARC32: ! %bb.0: ; SPARC32-NEXT: srl %o1, 8, %o2 ; SPARC32-NEXT: sethi 63, %o3 ; SPARC32-NEXT: or %o3, 768, %o3 ; SPARC32-NEXT: and %o2, %o3, %o2 ; SPARC32-NEXT: srl %o1, 24, %o4 ; SPARC32-NEXT: or %o2, %o4, %o2 ; SPARC32-NEXT: and %o1, %o3, %o4 ; SPARC32-NEXT: sll %o4, 8, %o4 ; SPARC32-NEXT: sll %o1, 24, %o1 ; SPARC32-NEXT: or %o1, %o4, %o1 ; SPARC32-NEXT: or %o1, %o2, %o2 ; SPARC32-NEXT: srl %o0, 8, %o1 ; SPARC32-NEXT: and %o1, %o3, %o1 ; SPARC32-NEXT: srl %o0, 24, %o4 ; SPARC32-NEXT: or %o1, %o4, %o1 ; SPARC32-NEXT: and %o0, %o3, %o3 ; SPARC32-NEXT: sll %o3, 8, %o3 ; SPARC32-NEXT: sll %o0, 24, %o0 ; SPARC32-NEXT: or %o0, %o3, %o0 ; SPARC32-NEXT: or %o0, %o1, %o1 ; SPARC32-NEXT: retl ; SPARC32-NEXT: mov %o2, %o0 ; ; SPARCEL-LABEL: u64_bswap: ; SPARCEL: ! %bb.0: ; SPARCEL-NEXT: srl %o1, 8, %o2 ; SPARCEL-NEXT: sethi 63, %o3 ; SPARCEL-NEXT: or %o3, 768, %o3 ; SPARCEL-NEXT: and %o2, %o3, %o2 ; SPARCEL-NEXT: srl %o1, 24, %o4 ; SPARCEL-NEXT: or %o2, %o4, %o2 ; SPARCEL-NEXT: and %o1, %o3, %o4 ; SPARCEL-NEXT: sll %o4, 8, %o4 ; SPARCEL-NEXT: sll %o1, 24, %o1 ; SPARCEL-NEXT: or %o1, %o4, %o1 ; SPARCEL-NEXT: or %o1, %o2, %o2 ; SPARCEL-NEXT: srl %o0, 8, %o1 ; SPARCEL-NEXT: and %o1, %o3, %o1 ; SPARCEL-NEXT: srl %o0, 24, %o4 ; SPARCEL-NEXT: or %o1, %o4, %o1 ; SPARCEL-NEXT: and %o0, %o3, %o3 ; SPARCEL-NEXT: sll %o3, 8, %o3 ; SPARCEL-NEXT: sll %o0, 24, %o0 ; SPARCEL-NEXT: or %o0, %o3, %o0 ; SPARCEL-NEXT: or %o0, %o1, %o1 ; SPARCEL-NEXT: retl ; SPARCEL-NEXT: mov %o2, %o0 ; ; SPARC64-LABEL: u64_bswap: ; SPARC64: .register %g2, #scratch ; SPARC64-NEXT: ! %bb.0: ; SPARC64-NEXT: srlx %o0, 24, %o1 ; SPARC64-NEXT: sethi 16320, %o2 ; SPARC64-NEXT: and %o1, %o2, %o1 ; SPARC64-NEXT: srlx %o0, 8, %o3 ; SPARC64-NEXT: sethi 4177920, %o4 ; SPARC64-NEXT: and %o3, %o4, %o3 ; SPARC64-NEXT: or %o3, %o1, %o1 ; SPARC64-NEXT: srlx %o0, 40, %o3 ; SPARC64-NEXT: sethi 63, %o5 ; SPARC64-NEXT: or %o5, 768, %o5 ; SPARC64-NEXT: and %o3, %o5, %o3 ; SPARC64-NEXT: srlx %o0, 56, %g2 ; SPARC64-NEXT: or %o3, %g2, %o3 ; SPARC64-NEXT: or %o1, %o3, %o1 ; SPARC64-NEXT: and %o0, %o4, %o3 ; SPARC64-NEXT: sllx %o3, 8, %o3 ; SPARC64-NEXT: and %o0, %o2, %o2 ; SPARC64-NEXT: sllx %o2, 24, %o2 ; SPARC64-NEXT: or %o2, %o3, %o2 ; SPARC64-NEXT: and %o0, %o5, %o3 ; SPARC64-NEXT: sllx %o3, 40, %o3 ; SPARC64-NEXT: sllx %o0, 56, %o0 ; SPARC64-NEXT: or %o0, %o3, %o0 ; SPARC64-NEXT: or %o0, %o2, %o0 ; SPARC64-NEXT: retl ; SPARC64-NEXT: or %o0, %o1, %o0 %2 = tail call i64 @llvm.bswap.i64(i64 %0) ret i64 %2 } define i16 @u16_bswapload(ptr %0) #0 { ; SPARC32-LABEL: u16_bswapload: ; SPARC32: ! %bb.0: ; SPARC32-NEXT: lduh [%o0], %o0 ; SPARC32-NEXT: srl %o0, 8, %o1 ; SPARC32-NEXT: sll %o0, 8, %o0 ; SPARC32-NEXT: retl ; SPARC32-NEXT: or %o0, %o1, %o0 ; ; SPARCEL-LABEL: u16_bswapload: ; SPARCEL: ! %bb.0: ; SPARCEL-NEXT: lduh [%o0], %o0 ; SPARCEL-NEXT: srl %o0, 8, %o1 ; SPARCEL-NEXT: sll %o0, 8, %o0 ; SPARCEL-NEXT: retl ; SPARCEL-NEXT: or %o0, %o1, %o0 ; ; SPARC64-LABEL: u16_bswapload: ; SPARC64: ! %bb.0: ; SPARC64-NEXT: lduh [%o0], %o0 ; SPARC64-NEXT: srl %o0, 8, %o1 ; SPARC64-NEXT: sll %o0, 8, %o0 ; SPARC64-NEXT: retl ; SPARC64-NEXT: or %o0, %o1, %o0 %2 = load i16, ptr %0, align 2 %3 = tail call i16 @llvm.bswap.i16(i16 %2) ret i16 %3 } define i32 @u32_bswapload(ptr %0) #0 { ; SPARC32-LABEL: u32_bswapload: ; SPARC32: ! %bb.0: ; SPARC32-NEXT: ld [%o0], %o0 ; SPARC32-NEXT: srl %o0, 8, %o1 ; SPARC32-NEXT: sethi 63, %o2 ; SPARC32-NEXT: or %o2, 768, %o2 ; SPARC32-NEXT: and %o1, %o2, %o1 ; SPARC32-NEXT: srl %o0, 24, %o3 ; SPARC32-NEXT: or %o1, %o3, %o1 ; SPARC32-NEXT: and %o0, %o2, %o2 ; SPARC32-NEXT: sll %o2, 8, %o2 ; SPARC32-NEXT: sll %o0, 24, %o0 ; SPARC32-NEXT: or %o0, %o2, %o0 ; SPARC32-NEXT: retl ; SPARC32-NEXT: or %o0, %o1, %o0 ; ; SPARCEL-LABEL: u32_bswapload: ; SPARCEL: ! %bb.0: ; SPARCEL-NEXT: ld [%o0], %o0 ; SPARCEL-NEXT: srl %o0, 8, %o1 ; SPARCEL-NEXT: sethi 63, %o2 ; SPARCEL-NEXT: or %o2, 768, %o2 ; SPARCEL-NEXT: and %o1, %o2, %o1 ; SPARCEL-NEXT: srl %o0, 24, %o3 ; SPARCEL-NEXT: or %o1, %o3, %o1 ; SPARCEL-NEXT: and %o0, %o2, %o2 ; SPARCEL-NEXT: sll %o2, 8, %o2 ; SPARCEL-NEXT: sll %o0, 24, %o0 ; SPARCEL-NEXT: or %o0, %o2, %o0 ; SPARCEL-NEXT: retl ; SPARCEL-NEXT: or %o0, %o1, %o0 ; ; SPARC64-LABEL: u32_bswapload: ; SPARC64: ! %bb.0: ; SPARC64-NEXT: ld [%o0], %o0 ; SPARC64-NEXT: srl %o0, 8, %o1 ; SPARC64-NEXT: sethi 63, %o2 ; SPARC64-NEXT: or %o2, 768, %o2 ; SPARC64-NEXT: and %o1, %o2, %o1 ; SPARC64-NEXT: srl %o0, 24, %o3 ; SPARC64-NEXT: or %o1, %o3, %o1 ; SPARC64-NEXT: and %o0, %o2, %o2 ; SPARC64-NEXT: sll %o2, 8, %o2 ; SPARC64-NEXT: sll %o0, 24, %o0 ; SPARC64-NEXT: or %o0, %o2, %o0 ; SPARC64-NEXT: retl ; SPARC64-NEXT: or %o0, %o1, %o0 %2 = load i32, ptr %0, align 4 %3 = tail call i32 @llvm.bswap.i32(i32 %2) ret i32 %3 } define i64 @u64_bswapload(ptr %0) #0 { ; SPARC32-LABEL: u64_bswapload: ; SPARC32: ! %bb.0: ; SPARC32-NEXT: ldd [%o0], %o2 ; SPARC32-NEXT: srl %o3, 8, %o0 ; SPARC32-NEXT: sethi 63, %o1 ; SPARC32-NEXT: or %o1, 768, %o1 ; SPARC32-NEXT: and %o0, %o1, %o0 ; SPARC32-NEXT: srl %o3, 24, %o4 ; SPARC32-NEXT: or %o0, %o4, %o0 ; SPARC32-NEXT: and %o3, %o1, %o4 ; SPARC32-NEXT: sll %o4, 8, %o4 ; SPARC32-NEXT: sll %o3, 24, %o5 ; SPARC32-NEXT: or %o5, %o4, %o4 ; SPARC32-NEXT: or %o4, %o0, %o0 ; SPARC32-NEXT: srl %o2, 8, %o4 ; SPARC32-NEXT: and %o4, %o1, %o4 ; SPARC32-NEXT: srl %o2, 24, %o5 ; SPARC32-NEXT: or %o4, %o5, %o4 ; SPARC32-NEXT: and %o2, %o1, %o1 ; SPARC32-NEXT: sll %o1, 8, %o1 ; SPARC32-NEXT: sll %o2, 24, %o2 ; SPARC32-NEXT: or %o2, %o1, %o1 ; SPARC32-NEXT: retl ; SPARC32-NEXT: or %o1, %o4, %o1 ; ; SPARCEL-LABEL: u64_bswapload: ; SPARCEL: ! %bb.0: ; SPARCEL-NEXT: ldd [%o0], %o2 ; SPARCEL-NEXT: srl %o3, 8, %o0 ; SPARCEL-NEXT: sethi 63, %o1 ; SPARCEL-NEXT: or %o1, 768, %o1 ; SPARCEL-NEXT: and %o0, %o1, %o0 ; SPARCEL-NEXT: srl %o3, 24, %o4 ; SPARCEL-NEXT: or %o0, %o4, %o0 ; SPARCEL-NEXT: and %o3, %o1, %o4 ; SPARCEL-NEXT: sll %o4, 8, %o4 ; SPARCEL-NEXT: sll %o3, 24, %o5 ; SPARCEL-NEXT: or %o5, %o4, %o4 ; SPARCEL-NEXT: or %o4, %o0, %o0 ; SPARCEL-NEXT: srl %o2, 8, %o4 ; SPARCEL-NEXT: and %o4, %o1, %o4 ; SPARCEL-NEXT: srl %o2, 24, %o5 ; SPARCEL-NEXT: or %o4, %o5, %o4 ; SPARCEL-NEXT: and %o2, %o1, %o1 ; SPARCEL-NEXT: sll %o1, 8, %o1 ; SPARCEL-NEXT: sll %o2, 24, %o2 ; SPARCEL-NEXT: or %o2, %o1, %o1 ; SPARCEL-NEXT: retl ; SPARCEL-NEXT: or %o1, %o4, %o1 ; ; SPARC64-LABEL: u64_bswapload: ; SPARC64: .register %g2, #scratch ; SPARC64-NEXT: ! %bb.0: ; SPARC64-NEXT: ldx [%o0], %o0 ; SPARC64-NEXT: srlx %o0, 24, %o1 ; SPARC64-NEXT: sethi 16320, %o2 ; SPARC64-NEXT: and %o1, %o2, %o1 ; SPARC64-NEXT: srlx %o0, 8, %o3 ; SPARC64-NEXT: sethi 4177920, %o4 ; SPARC64-NEXT: and %o3, %o4, %o3 ; SPARC64-NEXT: or %o3, %o1, %o1 ; SPARC64-NEXT: srlx %o0, 40, %o3 ; SPARC64-NEXT: sethi 63, %o5 ; SPARC64-NEXT: or %o5, 768, %o5 ; SPARC64-NEXT: and %o3, %o5, %o3 ; SPARC64-NEXT: srlx %o0, 56, %g2 ; SPARC64-NEXT: or %o3, %g2, %o3 ; SPARC64-NEXT: or %o1, %o3, %o1 ; SPARC64-NEXT: and %o0, %o4, %o3 ; SPARC64-NEXT: sllx %o3, 8, %o3 ; SPARC64-NEXT: and %o0, %o2, %o2 ; SPARC64-NEXT: sllx %o2, 24, %o2 ; SPARC64-NEXT: or %o2, %o3, %o2 ; SPARC64-NEXT: and %o0, %o5, %o3 ; SPARC64-NEXT: sllx %o3, 40, %o3 ; SPARC64-NEXT: sllx %o0, 56, %o0 ; SPARC64-NEXT: or %o0, %o3, %o0 ; SPARC64-NEXT: or %o0, %o2, %o0 ; SPARC64-NEXT: retl ; SPARC64-NEXT: or %o0, %o1, %o0 %2 = load i64, ptr %0, align 8 %3 = tail call i64 @llvm.bswap.i64(i64 %2) ret i64 %3 } define void @u16_bswapstore(ptr %0, i16 %1) #0 { ; SPARC32-LABEL: u16_bswapstore: ; SPARC32: ! %bb.0: ; SPARC32-NEXT: sethi 63, %o2 ; SPARC32-NEXT: or %o2, 768, %o2 ; SPARC32-NEXT: and %o1, %o2, %o2 ; SPARC32-NEXT: srl %o2, 8, %o2 ; SPARC32-NEXT: sll %o1, 8, %o1 ; SPARC32-NEXT: or %o1, %o2, %o1 ; SPARC32-NEXT: retl ; SPARC32-NEXT: sth %o1, [%o0] ; ; SPARCEL-LABEL: u16_bswapstore: ; SPARCEL: ! %bb.0: ; SPARCEL-NEXT: sethi 63, %o2 ; SPARCEL-NEXT: or %o2, 768, %o2 ; SPARCEL-NEXT: and %o1, %o2, %o2 ; SPARCEL-NEXT: srl %o2, 8, %o2 ; SPARCEL-NEXT: sll %o1, 8, %o1 ; SPARCEL-NEXT: or %o1, %o2, %o1 ; SPARCEL-NEXT: retl ; SPARCEL-NEXT: sth %o1, [%o0] ; ; SPARC64-LABEL: u16_bswapstore: ; SPARC64: ! %bb.0: ; SPARC64-NEXT: sethi 63, %o2 ; SPARC64-NEXT: or %o2, 768, %o2 ; SPARC64-NEXT: and %o1, %o2, %o2 ; SPARC64-NEXT: srl %o2, 8, %o2 ; SPARC64-NEXT: sll %o1, 8, %o1 ; SPARC64-NEXT: or %o1, %o2, %o1 ; SPARC64-NEXT: retl ; SPARC64-NEXT: sth %o1, [%o0] %3 = tail call i16 @llvm.bswap.i16(i16 %1) store i16 %3, ptr %0, align 2 ret void } define void @u32_bswapstore(ptr %0, i32 %1) #0 { ; SPARC32-LABEL: u32_bswapstore: ; SPARC32: ! %bb.0: ; SPARC32-NEXT: srl %o1, 8, %o2 ; SPARC32-NEXT: sethi 63, %o3 ; SPARC32-NEXT: or %o3, 768, %o3 ; SPARC32-NEXT: and %o2, %o3, %o2 ; SPARC32-NEXT: srl %o1, 24, %o4 ; SPARC32-NEXT: or %o2, %o4, %o2 ; SPARC32-NEXT: and %o1, %o3, %o3 ; SPARC32-NEXT: sll %o3, 8, %o3 ; SPARC32-NEXT: sll %o1, 24, %o1 ; SPARC32-NEXT: or %o1, %o3, %o1 ; SPARC32-NEXT: or %o1, %o2, %o1 ; SPARC32-NEXT: retl ; SPARC32-NEXT: st %o1, [%o0] ; ; SPARCEL-LABEL: u32_bswapstore: ; SPARCEL: ! %bb.0: ; SPARCEL-NEXT: srl %o1, 8, %o2 ; SPARCEL-NEXT: sethi 63, %o3 ; SPARCEL-NEXT: or %o3, 768, %o3 ; SPARCEL-NEXT: and %o2, %o3, %o2 ; SPARCEL-NEXT: srl %o1, 24, %o4 ; SPARCEL-NEXT: or %o2, %o4, %o2 ; SPARCEL-NEXT: and %o1, %o3, %o3 ; SPARCEL-NEXT: sll %o3, 8, %o3 ; SPARCEL-NEXT: sll %o1, 24, %o1 ; SPARCEL-NEXT: or %o1, %o3, %o1 ; SPARCEL-NEXT: or %o1, %o2, %o1 ; SPARCEL-NEXT: retl ; SPARCEL-NEXT: st %o1, [%o0] ; ; SPARC64-LABEL: u32_bswapstore: ; SPARC64: ! %bb.0: ; SPARC64-NEXT: srl %o1, 8, %o2 ; SPARC64-NEXT: sethi 63, %o3 ; SPARC64-NEXT: or %o3, 768, %o3 ; SPARC64-NEXT: and %o2, %o3, %o2 ; SPARC64-NEXT: srl %o1, 24, %o4 ; SPARC64-NEXT: or %o2, %o4, %o2 ; SPARC64-NEXT: and %o1, %o3, %o3 ; SPARC64-NEXT: sll %o3, 8, %o3 ; SPARC64-NEXT: sll %o1, 24, %o1 ; SPARC64-NEXT: or %o1, %o3, %o1 ; SPARC64-NEXT: or %o1, %o2, %o1 ; SPARC64-NEXT: retl ; SPARC64-NEXT: st %o1, [%o0] %3 = tail call i32 @llvm.bswap.i32(i32 %1) store i32 %3, ptr %0, align 4 ret void } define void @u64_bswapstore(ptr %0, i64 %1) #0 { ; SPARC32-LABEL: u64_bswapstore: ; SPARC32: ! %bb.0: ; SPARC32-NEXT: srl %o1, 8, %o3 ; SPARC32-NEXT: sethi 63, %o4 ; SPARC32-NEXT: or %o4, 768, %o4 ; SPARC32-NEXT: and %o3, %o4, %o3 ; SPARC32-NEXT: srl %o1, 24, %o5 ; SPARC32-NEXT: or %o3, %o5, %o3 ; SPARC32-NEXT: and %o1, %o4, %o5 ; SPARC32-NEXT: sll %o5, 8, %o5 ; SPARC32-NEXT: sll %o1, 24, %o1 ; SPARC32-NEXT: or %o1, %o5, %o1 ; SPARC32-NEXT: or %o1, %o3, %g3 ; SPARC32-NEXT: srl %o2, 8, %o1 ; SPARC32-NEXT: and %o1, %o4, %o1 ; SPARC32-NEXT: srl %o2, 24, %o3 ; SPARC32-NEXT: or %o1, %o3, %o1 ; SPARC32-NEXT: and %o2, %o4, %o3 ; SPARC32-NEXT: sll %o3, 8, %o3 ; SPARC32-NEXT: sll %o2, 24, %o2 ; SPARC32-NEXT: or %o2, %o3, %o2 ; SPARC32-NEXT: or %o2, %o1, %g2 ; SPARC32-NEXT: retl ; SPARC32-NEXT: std %g2, [%o0] ; ; SPARCEL-LABEL: u64_bswapstore: ; SPARCEL: ! %bb.0: ; SPARCEL-NEXT: srl %o1, 8, %o3 ; SPARCEL-NEXT: sethi 63, %o4 ; SPARCEL-NEXT: or %o4, 768, %o4 ; SPARCEL-NEXT: and %o3, %o4, %o3 ; SPARCEL-NEXT: srl %o1, 24, %o5 ; SPARCEL-NEXT: or %o3, %o5, %o3 ; SPARCEL-NEXT: and %o1, %o4, %o5 ; SPARCEL-NEXT: sll %o5, 8, %o5 ; SPARCEL-NEXT: sll %o1, 24, %o1 ; SPARCEL-NEXT: or %o1, %o5, %o1 ; SPARCEL-NEXT: or %o1, %o3, %g3 ; SPARCEL-NEXT: srl %o2, 8, %o1 ; SPARCEL-NEXT: and %o1, %o4, %o1 ; SPARCEL-NEXT: srl %o2, 24, %o3 ; SPARCEL-NEXT: or %o1, %o3, %o1 ; SPARCEL-NEXT: and %o2, %o4, %o3 ; SPARCEL-NEXT: sll %o3, 8, %o3 ; SPARCEL-NEXT: sll %o2, 24, %o2 ; SPARCEL-NEXT: or %o2, %o3, %o2 ; SPARCEL-NEXT: or %o2, %o1, %g2 ; SPARCEL-NEXT: retl ; SPARCEL-NEXT: std %g2, [%o0] ; ; SPARC64-LABEL: u64_bswapstore: ; SPARC64: .register %g2, #scratch ; SPARC64-NEXT: .register %g3, #scratch ; SPARC64-NEXT: ! %bb.0: ; SPARC64-NEXT: srlx %o1, 24, %o2 ; SPARC64-NEXT: sethi 16320, %o3 ; SPARC64-NEXT: and %o2, %o3, %o2 ; SPARC64-NEXT: srlx %o1, 8, %o4 ; SPARC64-NEXT: sethi 4177920, %o5 ; SPARC64-NEXT: and %o4, %o5, %o4 ; SPARC64-NEXT: or %o4, %o2, %o2 ; SPARC64-NEXT: srlx %o1, 40, %o4 ; SPARC64-NEXT: sethi 63, %g2 ; SPARC64-NEXT: or %g2, 768, %g2 ; SPARC64-NEXT: and %o4, %g2, %o4 ; SPARC64-NEXT: srlx %o1, 56, %g3 ; SPARC64-NEXT: or %o4, %g3, %o4 ; SPARC64-NEXT: or %o2, %o4, %o2 ; SPARC64-NEXT: and %o1, %o5, %o4 ; SPARC64-NEXT: sllx %o4, 8, %o4 ; SPARC64-NEXT: and %o1, %o3, %o3 ; SPARC64-NEXT: sllx %o3, 24, %o3 ; SPARC64-NEXT: or %o3, %o4, %o3 ; SPARC64-NEXT: and %o1, %g2, %o4 ; SPARC64-NEXT: sllx %o4, 40, %o4 ; SPARC64-NEXT: sllx %o1, 56, %o1 ; SPARC64-NEXT: or %o1, %o4, %o1 ; SPARC64-NEXT: or %o1, %o3, %o1 ; SPARC64-NEXT: or %o1, %o2, %o1 ; SPARC64-NEXT: retl ; SPARC64-NEXT: stx %o1, [%o0] %3 = tail call i64 @llvm.bswap.i64(i64 %1) store i64 %3, ptr %0, align 8 ret void } attributes #0 = { nounwind }