xref: /original-bsd/lib/libc/mips/net/htonl.s (revision 22cb382a)
1/*-
2 * Copyright (c) 1991 The Regents of the University of California.
3 * All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * Ralph Campbell.
7 *
8 * %sccs.include.redist.c%
9 */
10
11#include <machine/machAsmDefs.h>
12
13#if defined(LIBC_SCCS) && !defined(lint)
14	ASMSTR("@(#)htonl.s	5.4 (Berkeley) 07/26/92")
15#endif /* LIBC_SCCS and not lint */
16
17#include <machine/endian.h>
18#undef	 htonl
19#undef	 ntohl
20
21/*
22 * netorder = htonl(hostorder)
23 * hostorder = ntohl(netorder)
24 */
25LEAF(htonl)				# a0 = 0x11223344, return 0x44332211
26ALEAF(ntohl)
27#if BYTE_ORDER == LITTLE_ENDIAN
28	srl	v1, a0, 24		# v1 = 0x00000011
29	sll	v0, a0, 24		# v0 = 0x44000000
30	or	v0, v0, v1
31	and	v1, a0, 0xff00
32	sll	v1, v1, 8		# v1 = 0x00330000
33	or	v0, v0, v1
34	srl	v1, a0, 8
35	and	v1, v1, 0xff00		# v1 = 0x00002200
36	or	v0, v0, v1
37#else
38#if BYTE_ORDER == BIG_ENDIAN
39	move	v0, a0
40#else
41	ERROR
42#endif
43#endif
44	j	ra
45END(htonl)
46