Annotation of qemu/roms/openbios/arch/ppc/misc.S, revision 1.1.1.1

1.1       root        1: /*
                      2:  *   Creation Date: <2002/10/20 15:54:50 samuel>
                      3:  *   Time-stamp: <2002/10/20 15:57:21 samuel>
                      4:  *
                      5:  *     <misc.S>
                      6:  *
                      7:  *     Low-level stuff
                      8:  *
                      9:  *   Copyright (C) 2002, 2003 Samuel Rydh ([email protected])
                     10:  *
                     11:  *   Based upon misc.S from the the linux kernel with the following
                     12:  *   copyrights:
                     13:  *
                     14:  *   Copyright (C) 1995-1996 Gary Thomas ([email protected]),
                     15:  *   Cort Dougan ([email protected]), Paul Mackerras
                     16:  *
                     17:  *   This program is free software; you can redistribute it and/or
                     18:  *   modify it under the terms of the GNU General Public License
                     19:  *   as published by the Free Software Foundation
                     20:  *
                     21:  */
                     22: 
                     23: #include "asm/asmdefs.h"
                     24: #include "asm/processor.h"
                     25: 
                     26: 
                     27: /*
                     28:  * Extended precision shifts.
                     29:  *
                     30:  * Updated to be valid for shift counts from 0 to 63 inclusive.
                     31:  * -- Gabriel
                     32:  *
                     33:  * R3/R4 has 64 bit value
                     34:  * R5    has shift count
                     35:  * result in R3/R4
                     36:  *
                     37:  *  ashrdi3: arithmetic right shift (sign propagation)
                     38:  *  lshrdi3: logical right shift
                     39:  *  ashldi3: left shift
                     40:  */
                     41: GLOBL(__ashrdi3):
                     42:        subfic  r6,r5,32
                     43:        srw     r4,r4,r5        # LSW = count > 31 ? 0 : LSW >> count
                     44:        addi    r7,r5,32        # could be xori, or addi with -32
                     45:        slw     r6,r3,r6        # t1 = count > 31 ? 0 : MSW << (32-count)
                     46:        rlwinm  r8,r7,0,32      # t3 = (count < 32) ? 32 : 0
                     47:        sraw    r7,r3,r7        # t2 = MSW >> (count-32)
                     48:        or      r4,r4,r6        # LSW |= t1
                     49:        slw     r7,r7,r8        # t2 = (count < 32) ? 0 : t2
                     50:        sraw    r3,r3,r5        # MSW = MSW >> count
                     51:        or      r4,r4,r7        # LSW |= t2
                     52:        blr
                     53: 
                     54: GLOBL(__ashldi3):
                     55:        subfic  r6,r5,32
                     56:        slw     r3,r3,r5        # MSW = count > 31 ? 0 : MSW << count
                     57:        addi    r7,r5,32        # could be xori, or addi with -32
                     58:        srw     r6,r4,r6        # t1 = count > 31 ? 0 : LSW >> (32-count)
                     59:        slw     r7,r4,r7        # t2 = count < 32 ? 0 : LSW << (count-32)
                     60:        or      r3,r3,r6        # MSW |= t1
                     61:        slw     r4,r4,r5        # LSW = LSW << count
                     62:        or      r3,r3,r7        # MSW |= t2
                     63:        blr
                     64: 
                     65: GLOBL(__lshrdi3):
                     66:        subfic  r6,r5,32
                     67:        srw     r4,r4,r5        # LSW = count > 31 ? 0 : LSW >> count
                     68:        addi    r7,r5,32        # could be xori, or addi with -32
                     69:        slw     r6,r3,r6        # t1 = count > 31 ? 0 : MSW << (32-count)
                     70:        srw     r7,r3,r7        # t2 = count < 32 ? 0 : MSW >> (count-32)
                     71:        or      r4,r4,r6        # LSW |= t1
                     72:        srw     r3,r3,r5        # MSW = MSW >> count
                     73:        or      r4,r4,r7        # LSW |= t2
                     74:        blr

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.