Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

125 lines
2.2 KiB

// 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)