File:  [Isaki's NoNo m68k/m88k emulator] / nono / lib / myendian.h
Revision 1.1.1.1 (vendor branch): download - view: text, annotated - select for diffs
Wed Apr 29 17:05:08 2026 UTC (2 months, 3 weeks ago) by root
Branches: MAIN, Isaki
CVS tags: v026, v025, v024, v023, v022, v021, v020, v019, v018, v017, v016, v015, HEAD
nono 0.3.0

//
// nono
// Copyright (C) 2020 nono project
// Licensed under nono-license.txt
//

//
// エンディアン関係
//

// エンディアン関係が定義してあるヘッダと、定義内容が全員微妙に異なる。
// バイトオーダは BYTE_ORDER、LITTLE_ENDIAN、BIG_ENDIAN の3つの定義。
// なお bswapNN() はここではなく mybswap.h 参照。
//
// OS		| ヘッダ			 | バイトオーダ	| htobeNN() 系マクロ
// ---------+--------------------+--------------+-------------------
// NetBSD	| <sys/endian.h>	 | _BYTE_ORDER	| あり
// FreeBSD	| <sys/endian.h>	 |				| あり
// OpenBSD	| <sys/endian.h>	 |				| あり(*1)
// Linux	| <endian.h>		 | BYTE_ORDER	| あり
// OSX		| <machine/endian.h> | BYTE_ORDER	| なし
//
// *1: OpenBSD は本来 betohNN() のように NN は常に後置だったが beNNtoh()
//     形式も使える。

#pragma once

#if defined(HAVE_ENDIAN_H)
#include <endian.h>					// Linux
#endif
#if defined(HAVE_SYS_ENDIAN_H)
#include <sys/endian.h>				// *BSD
#endif
#if defined(HAVE_MACHINE_ENDIAN_H)
#include <machine/endian.h>			// OSX
#endif

#if defined(BYTE_ORDER)
#elif defined(_BYTE_ORDER)
#define BYTE_ORDER	_BYTE_ORDER
#elif defined(__BYTE_ORDER)
#define BYTE_ORDER	__BYTE_ORDER
#else
#error no BYTE_ORDER defined
#endif

#if defined(BIG_ENDIAN)
#elif defined(_BIG_ENDIAN)
#define BIG_ENDIAN	_BIG_ENDIAN
#elif defined(__BIG_ENDIAN)
#define BIG_ENDIAN	__BIG_ENDIAN
#else
#error no BIG_ENDIAN defined
#endif

#if defined(LITTLE_ENDIAN)
#elif defined(_LITTLE_ENDIAN)
#define LITTLE_ENDIAN	_LITTLE_ENDIAN
#elif defined(__LITTLE_ENDIAN)
#define LITTLE_ENDIAN	__LITTLE_ENDIAN
#else
#error no LITTLE_ENDIAN defined
#endif

// htobeNN() 系マクロ。
// 代表として htobe16() の有無だけチェックしている。
#if !defined(HAVE_HTOBE16)
#if defined(HAVE_LIBKERN_OSBYTEORDER_H)
#include <libkern/OSByteOrder.h>
#define htobe16(x)	OSSwapHostToBigInt16(x)
#define htobe32(x)	OSSwapHostToBigInt32(x)
#define htobe64(x)	OSSwapHostToBigInt64(x)
#define htole16(x)	OSSwapHostToLittleInt16(x)
#define htole32(x)	OSSwapHostToLittleInt32(x)
#define htole64(x)	OSSwapHostToLittleInt64(x)

#define be16toh(x)	OSSwapBigToHostInt16(x)
#define be32toh(x)	OSSwapBigToHostInt32(x)
#define be64toh(x)	OSSwapBigToHostInt64(x)
#define le16toh(x)	OSSwapLittleToHostInt16(x)
#define le32toh(x)	OSSwapLittleToHostInt32(x)
#define le64toh(x)	OSSwapLittleToHostInt64(x)

#else
#error No htobeNN() family defined
#endif

#endif // !HAVE_HTOBE16

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.