Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0-or-later */
0002 /*
0003  * Copyright 2015, Cyril Bur, IBM Corp.
0004  */
0005 
0006 #include "basic_asm.h"
0007 
0008 /* POS MUST BE 16 ALIGNED! */
0009 #define PUSH_VMX(pos,reg) \
0010     li  reg,pos; \
0011     stvx    v20,reg,%r1; \
0012     addi    reg,reg,16; \
0013     stvx    v21,reg,%r1; \
0014     addi    reg,reg,16; \
0015     stvx    v22,reg,%r1; \
0016     addi    reg,reg,16; \
0017     stvx    v23,reg,%r1; \
0018     addi    reg,reg,16; \
0019     stvx    v24,reg,%r1; \
0020     addi    reg,reg,16; \
0021     stvx    v25,reg,%r1; \
0022     addi    reg,reg,16; \
0023     stvx    v26,reg,%r1; \
0024     addi    reg,reg,16; \
0025     stvx    v27,reg,%r1; \
0026     addi    reg,reg,16; \
0027     stvx    v28,reg,%r1; \
0028     addi    reg,reg,16; \
0029     stvx    v29,reg,%r1; \
0030     addi    reg,reg,16; \
0031     stvx    v30,reg,%r1; \
0032     addi    reg,reg,16; \
0033     stvx    v31,reg,%r1;
0034 
0035 /* POS MUST BE 16 ALIGNED! */
0036 #define POP_VMX(pos,reg) \
0037     li  reg,pos; \
0038     lvx v20,reg,%r1; \
0039     addi    reg,reg,16; \
0040     lvx v21,reg,%r1; \
0041     addi    reg,reg,16; \
0042     lvx v22,reg,%r1; \
0043     addi    reg,reg,16; \
0044     lvx v23,reg,%r1; \
0045     addi    reg,reg,16; \
0046     lvx v24,reg,%r1; \
0047     addi    reg,reg,16; \
0048     lvx v25,reg,%r1; \
0049     addi    reg,reg,16; \
0050     lvx v26,reg,%r1; \
0051     addi    reg,reg,16; \
0052     lvx v27,reg,%r1; \
0053     addi    reg,reg,16; \
0054     lvx v28,reg,%r1; \
0055     addi    reg,reg,16; \
0056     lvx v29,reg,%r1; \
0057     addi    reg,reg,16; \
0058     lvx v30,reg,%r1; \
0059     addi    reg,reg,16; \
0060     lvx v31,reg,%r1;
0061 
0062 /*
0063  * Careful this will 'clobber' vmx (by design)
0064  * Don't call this from C
0065  */
0066 FUNC_START(load_vmx)
0067     li  r5,0
0068     lvx v20,r5,r3
0069     addi    r5,r5,16
0070     lvx v21,r5,r3
0071     addi    r5,r5,16
0072     lvx v22,r5,r3
0073     addi    r5,r5,16
0074     lvx v23,r5,r3
0075     addi    r5,r5,16
0076     lvx v24,r5,r3
0077     addi    r5,r5,16
0078     lvx v25,r5,r3
0079     addi    r5,r5,16
0080     lvx v26,r5,r3
0081     addi    r5,r5,16
0082     lvx v27,r5,r3
0083     addi    r5,r5,16
0084     lvx v28,r5,r3
0085     addi    r5,r5,16
0086     lvx v29,r5,r3
0087     addi    r5,r5,16
0088     lvx v30,r5,r3
0089     addi    r5,r5,16
0090     lvx v31,r5,r3
0091     blr
0092 FUNC_END(load_vmx)