126 lines
2.2 KiB
ArmAsm
126 lines
2.2 KiB
ArmAsm
|
// TITLE("Byte Swap Functions")
|
|||
|
//++
|
|||
|
//
|
|||
|
// Copyright (c) 1998 Intel Corporation
|
|||
|
// Copyright (c) 1997 Microsoft Corporation
|
|||
|
//
|
|||
|
// Module Name:
|
|||
|
//
|
|||
|
// byteswap.s
|
|||
|
//
|
|||
|
// Abstract:
|
|||
|
//
|
|||
|
// This module implements functions to perform byte swapping operations.
|
|||
|
//
|
|||
|
// Author:
|
|||
|
//
|
|||
|
// William Cheung (v-willc) 30-Nov-1998
|
|||
|
//
|
|||
|
// Environment:
|
|||
|
//
|
|||
|
// User or Kernel mode.
|
|||
|
//
|
|||
|
// Revision History:
|
|||
|
//
|
|||
|
//--
|
|||
|
|
|||
|
#include "ksia64.h"
|
|||
|
|
|||
|
SBTTL("RtlUshortByteSwap")
|
|||
|
//++
|
|||
|
//
|
|||
|
// USHORT
|
|||
|
// RtlUshortByteSwap(
|
|||
|
// IN USHORT Source
|
|||
|
// )
|
|||
|
//
|
|||
|
// Routine Description:
|
|||
|
//
|
|||
|
// The RtlUshortByteSwap function exchanges bytes 0 and 1 of Source
|
|||
|
// and returns the resulting USHORT.
|
|||
|
//
|
|||
|
// Arguments:
|
|||
|
//
|
|||
|
// Source (a0[0..15]) - 16-bit value to byteswap.
|
|||
|
//
|
|||
|
// Return Value:
|
|||
|
//
|
|||
|
// The 16-bit integer result is returned as the function value
|
|||
|
// in v0[0..15].
|
|||
|
//
|
|||
|
//--
|
|||
|
|
|||
|
LEAF_ENTRY(RtlUshortByteSwap)
|
|||
|
|
|||
|
shl t0 = a0, 48
|
|||
|
;;
|
|||
|
mux1 v0 = t0, @rev
|
|||
|
br.ret.sptk brp
|
|||
|
|
|||
|
LEAF_EXIT(RtlUshortByteSwap)
|
|||
|
|
|||
|
SBTTL("RtlUlongByteSwap")
|
|||
|
//++
|
|||
|
//
|
|||
|
// ULONG
|
|||
|
// RtlUlongByteSwap(
|
|||
|
// IN ULONG Source
|
|||
|
// )
|
|||
|
//
|
|||
|
// Routine Description:
|
|||
|
//
|
|||
|
// The RtlUlongByteSwap function exchanges byte pairs 0:3 and 1:2 of
|
|||
|
// Source and returns the the resulting ULONG.
|
|||
|
//
|
|||
|
// Arguments:
|
|||
|
//
|
|||
|
// Source (a0[0..31]) - 32-bit value to byteswap.
|
|||
|
//
|
|||
|
// Return Value:
|
|||
|
//
|
|||
|
// The 32-bit integer result is returned as the function value
|
|||
|
// in v0[0..31].
|
|||
|
//
|
|||
|
//--
|
|||
|
|
|||
|
LEAF_ENTRY(RtlUlongByteSwap)
|
|||
|
|
|||
|
shl t0 = a0, 32
|
|||
|
;;
|
|||
|
mux1 v0 = t0, @rev
|
|||
|
br.ret.sptk brp
|
|||
|
|
|||
|
LEAF_EXIT(RtlUlongByteSwap)
|
|||
|
|
|||
|
SBTTL("RtlUlonglongByteSwap")
|
|||
|
//++
|
|||
|
//
|
|||
|
// ULONG
|
|||
|
// RtlUlonglongByteSwap(
|
|||
|
// IN ULONGLONG Source
|
|||
|
// )
|
|||
|
//
|
|||
|
// /*++
|
|||
|
//
|
|||
|
// Routine Description:
|
|||
|
//
|
|||
|
// The RtlUlonglongByteSwap function exchanges byte pairs 0:7, 1:6, 2:5,
|
|||
|
// and 3:4 of Source and returns the resulting ULONGLONG.
|
|||
|
//
|
|||
|
// Arguments:
|
|||
|
//
|
|||
|
// Source (a0[0..63]) - 64-bit value to byteswap.
|
|||
|
//
|
|||
|
// Return Value:
|
|||
|
//
|
|||
|
// Swapped 64-bit value.
|
|||
|
//
|
|||
|
//--
|
|||
|
|
|||
|
LEAF_ENTRY(RtlUlonglongByteSwap)
|
|||
|
|
|||
|
mux1 v0 = a0, @rev
|
|||
|
br.ret.sptk brp
|
|||
|
|
|||
|
LEAF_EXIT(RtlUlonglongByteSwap)
|