]> git.proxmox.com Git - mirror_edk2.git/blame - EdkModulePkg/Universal/Ebc/Dxe/Ipf/IpfMul.s
These files are no longer needed as the PE32 and Cache Lib from the MDE make them...
[mirror_edk2.git] / EdkModulePkg / Universal / Ebc / Dxe / Ipf / IpfMul.s
CommitLineData
878ddf1f 1///*++\r
2//\r
3// Copyright (c) 2006, Intel Corporation \r
4// All rights reserved. This program and the accompanying materials \r
5// are licensed and made available under the terms and conditions of the BSD License \r
6// which accompanies this distribution. The full text of the license may be found at \r
7// http://opensource.org/licenses/bsd-license.php \r
8// \r
9// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
10// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
11// \r
12//Module Name: \r
13//\r
14// IpfMul.s\r
15// \r
16//Abstract:\r
17//\r
18// Low level routines for IPF multiply support\r
19// \r
20//--*/ \r
21\r
22.file "IpfMul.s"\r
23.section .text\r
24\r
25 .proc MulS64x64#\r
26 .align 32\r
1cb5cfc1 27 .globl MulS64x64#\r
878ddf1f 28 .align 32\r
29\r
30///*++\r
31//\r
32//Routine Description:\r
33//\r
34// Multiply two 64-bit signed numbers.\r
35//\r
36// \r
37//Arguments:\r
38//\r
39// INT64 \r
40// MulS64x64 (\r
41// IN INT64 Value1, \r
42// IN INT64 Value2, \r
43// OUT INT64 *ResultHigh);\r
44//\r
45//Returns:\r
46//\r
47// 64-bit signed result\r
48// \r
49//--*/\r
50\r
51MulS64x64:\r
52 // signed 64x64->128-bit multiply\r
53 // A in r32, B in r33, Q_hi stored in [r34], Q_lo returned in r8\r
54{ .mfi\r
55 alloc r31=ar.pfs,3,0,0,0 // r32-r34\r
56 nop.f 0\r
57 nop.i 0;;\r
58}\r
59{.mmi\r
60 setf.sig f6=r32\r
61 setf.sig f7=r33\r
62 nop.i 0;;\r
63}\r
64\r
65{.mfi\r
66 nop.m 0\r
67 xma.h f8=f6,f7,f0\r
68 nop.i 0\r
69}\r
70{.mfi\r
71 nop.m 0\r
72 xma.l f6=f6,f7,f0\r
73 nop.i 0;;\r
74}\r
75\r
76\r
77{.mmb\r
78 stf8 [r34]=f8\r
79 getf.sig r8=f6\r
80 br.ret.sptk b0;;\r
81}\r
82\r
83.endp MulS64x64\r
84\r
85 .proc MulU64x64#\r
86 .align 32\r
1cb5cfc1 87 .globl MulU64x64#\r
878ddf1f 88 .align 32\r
89\r
90\r
91///*++\r
92//\r
93//Routine Description:\r
94//\r
95// Multiply two 64-bit unsigned numbers.\r
96//\r
97// \r
98//Arguments:\r
99//\r
100// UINT64 \r
101// MulU64x64 (\r
102// IN UINT64 Value1, \r
103// IN UINT64 Value2, \r
104// OUT UINT64 *ResultHigh);\r
105//\r
106//Returns:\r
107//\r
108// 64-bit unsigned result\r
109// \r
110//--*/\r
111MulU64x64:\r
112 // A in r32, B in r33, Q_hi stored in [r34], Q_lo returned in r8\r
113{ .mfi\r
114 alloc r31=ar.pfs,3,0,0,0 // r32-r34\r
115 nop.f 0\r
116 nop.i 0;;\r
117}\r
118{.mmi\r
119 setf.sig f6=r32\r
120 setf.sig f7=r33\r
121 nop.i 0;;\r
122}\r
123\r
124{.mfi\r
125 nop.m 0\r
126 xma.hu f8=f6,f7,f0\r
127 nop.i 0\r
128}\r
129{.mfi\r
130 nop.m 0\r
131 xma.l f6=f6,f7,f0\r
132 nop.i 0;;\r
133}\r
134\r
135\r
136{.mmb\r
137 stf8 [r34]=f8\r
138 getf.sig r8=f6\r
139 br.ret.sptk b0;;\r
140}\r
141\r
142.endp MulU64x64\r
143\r
144\r