1*4882a593Smuzhiyun/* 2*4882a593Smuzhiyun * This code was copied from arch/powerpc/kernel/misc_32.S in the Linux 3*4882a593Smuzhiyun * kernel sources (commit 85e2efbb1db9a18d218006706d6e4fbeb0216213, also 4*4882a593Smuzhiyun * known as 2.6.38-rc5). The source file copyrights are as follows: 5*4882a593Smuzhiyun * 6*4882a593Smuzhiyun * (C) Copyright 1995-1996 Gary Thomas (gdt@linuxppc.org) 7*4882a593Smuzhiyun * 8*4882a593Smuzhiyun * Largely rewritten by Cort Dougan (cort@cs.nmt.edu) 9*4882a593Smuzhiyun * and Paul Mackerras. 10*4882a593Smuzhiyun * 11*4882a593Smuzhiyun * SPDX-License-Identifier: GPL-2.0+ 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun#include <ppc_asm.tmpl> 15*4882a593Smuzhiyun#include <ppc_defs.h> 16*4882a593Smuzhiyun#include <config.h> 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun/* 19*4882a593Smuzhiyun * Extended precision shifts. 20*4882a593Smuzhiyun * 21*4882a593Smuzhiyun * Updated to be valid for shift counts from 0 to 63 inclusive. 22*4882a593Smuzhiyun * -- Gabriel 23*4882a593Smuzhiyun * 24*4882a593Smuzhiyun * R3/R4 has 64 bit value 25*4882a593Smuzhiyun * R5 has shift count 26*4882a593Smuzhiyun * result in R3/R4 27*4882a593Smuzhiyun * 28*4882a593Smuzhiyun * ashrdi3: arithmetic right shift (sign propagation) 29*4882a593Smuzhiyun * lshrdi3: logical right shift 30*4882a593Smuzhiyun * ashldi3: left shift 31*4882a593Smuzhiyun */ 32*4882a593Smuzhiyun .globl __ashrdi3 33*4882a593Smuzhiyun__ashrdi3: 34*4882a593Smuzhiyun subfic r6,r5,32 35*4882a593Smuzhiyun srw r4,r4,r5 # LSW = count > 31 ? 0 : LSW >> count 36*4882a593Smuzhiyun addi r7,r5,32 # could be xori, or addi with -32 37*4882a593Smuzhiyun slw r6,r3,r6 # t1 = count > 31 ? 0 : MSW << (32-count) 38*4882a593Smuzhiyun rlwinm r8,r7,0,32 # t3 = (count < 32) ? 32 : 0 39*4882a593Smuzhiyun sraw r7,r3,r7 # t2 = MSW >> (count-32) 40*4882a593Smuzhiyun or r4,r4,r6 # LSW |= t1 41*4882a593Smuzhiyun slw r7,r7,r8 # t2 = (count < 32) ? 0 : t2 42*4882a593Smuzhiyun sraw r3,r3,r5 # MSW = MSW >> count 43*4882a593Smuzhiyun or r4,r4,r7 # LSW |= t2 44*4882a593Smuzhiyun blr 45