+++ /dev/null
-///*++\r
-//\r
-// Copyright (c) 2006, Intel Corporation \r
-// All rights reserved. This program and the accompanying materials \r
-// are licensed and made available under the terms and conditions of the BSD License \r
-// which accompanies this distribution. The full text of the license may be found at \r
-// http://opensource.org/licenses/bsd-license.php \r
-// \r
-// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
-// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
-// \r
-//Module Name: \r
-//\r
-// IpfMul.s\r
-// \r
-//Abstract:\r
-//\r
-// Low level routines for IPF multiply support\r
-// \r
-//--*/ \r
-\r
-.file "IpfMul.s"\r
-.section .text\r
-\r
- .proc MulS64x64#\r
- .align 32\r
- .globl MulS64x64#\r
- .align 32\r
-\r
-///*++\r
-//\r
-//Routine Description:\r
-//\r
-// Multiply two 64-bit signed numbers.\r
-//\r
-// \r
-//Arguments:\r
-//\r
-// INT64 \r
-// MulS64x64 (\r
-// IN INT64 Value1, \r
-// IN INT64 Value2, \r
-// OUT INT64 *ResultHigh);\r
-//\r
-//Returns:\r
-//\r
-// 64-bit signed result\r
-// \r
-//--*/\r
-\r
-MulS64x64:\r
- // signed 64x64->128-bit multiply\r
- // A in r32, B in r33, Q_hi stored in [r34], Q_lo returned in r8\r
-{ .mfi\r
- alloc r31=ar.pfs,3,0,0,0 // r32-r34\r
- nop.f 0\r
- nop.i 0;;\r
-}\r
-{.mmi\r
- setf.sig f6=r32\r
- setf.sig f7=r33\r
- nop.i 0;;\r
-}\r
-\r
-{.mfi\r
- nop.m 0\r
- xma.h f8=f6,f7,f0\r
- nop.i 0\r
-}\r
-{.mfi\r
- nop.m 0\r
- xma.l f6=f6,f7,f0\r
- nop.i 0;;\r
-}\r
-\r
-\r
-{.mmb\r
- stf8 [r34]=f8\r
- getf.sig r8=f6\r
- br.ret.sptk b0;;\r
-}\r
-\r
-.endp MulS64x64\r
-\r
- .proc MulU64x64#\r
- .align 32\r
- .globl MulU64x64#\r
- .align 32\r
-\r
-\r
-///*++\r
-//\r
-//Routine Description:\r
-//\r
-// Multiply two 64-bit unsigned numbers.\r
-//\r
-// \r
-//Arguments:\r
-//\r
-// UINT64 \r
-// MulU64x64 (\r
-// IN UINT64 Value1, \r
-// IN UINT64 Value2, \r
-// OUT UINT64 *ResultHigh);\r
-//\r
-//Returns:\r
-//\r
-// 64-bit unsigned result\r
-// \r
-//--*/\r
-MulU64x64:\r
- // A in r32, B in r33, Q_hi stored in [r34], Q_lo returned in r8\r
-{ .mfi\r
- alloc r31=ar.pfs,3,0,0,0 // r32-r34\r
- nop.f 0\r
- nop.i 0;;\r
-}\r
-{.mmi\r
- setf.sig f6=r32\r
- setf.sig f7=r33\r
- nop.i 0;;\r
-}\r
-\r
-{.mfi\r
- nop.m 0\r
- xma.hu f8=f6,f7,f0\r
- nop.i 0\r
-}\r
-{.mfi\r
- nop.m 0\r
- xma.l f6=f6,f7,f0\r
- nop.i 0;;\r
-}\r
-\r
-\r
-{.mmb\r
- stf8 [r34]=f8\r
- getf.sig r8=f6\r
- br.ret.sptk b0;;\r
-}\r
-\r
-.endp MulU64x64\r
-\r
-\r