--- gforth/prim 2010/05/17 09:01:11 1.250 +++ gforth/prim 2010/07/11 19:56:00 1.252 @@ -2492,53 +2492,89 @@ c_addr = "libltdl is not configured"; u = strlen(c_addr); #endif -w!be ( w c_addr -- ) gforth w_store_be +be-w! ( w c_addr -- ) gforth w_store_be ""Store the bottom 16 bits of @i{w} at @i{c_addr} in big endian format."" -*(Wyde*)(c_addr) = htobe16(w); +c_addr[0] = w >> 8; +c_addr[1] = w; -l!be ( w c_addr -- ) gforth l_store_be +be-l! ( w c_addr -- ) gforth l_store_be ""Store the bottom 32 bits of @i{w} at @i{c_addr} in big endian format."" -*(Tetrabyte*)(c_addr) = htobe32(w); +c_addr[0] = w >> 24; +c_addr[1] = w >> 16; +c_addr[2] = w >> 8; +c_addr[3] = w; -x!be ( w c_addr -- ) gforth x_store_be +be-x! ( w c_addr -- ) gforth x_store_be ""Store the bottom 64 bits of @i{w} at @i{c_addr} in big endian format."" -*(Octabyte*)(c_addr) = htobe64(w); +c_addr[0] = w >> 56; +c_addr[1] = w >> 48; +c_addr[2] = w >> 40; +c_addr[3] = w >> 32; +c_addr[4] = w >> 24; +c_addr[5] = w >> 16; +c_addr[6] = w >> 8; +c_addr[7] = w; -w!le ( w c_addr -- ) gforth w_store_le +le-w! ( w c_addr -- ) gforth w_store_le ""Store the bottom 16 bits of @i{w} at @i{c_addr} in big endian format."" -*(Wyde*)(c_addr) = htole16(w); +c_addr[1] = w >> 8; +c_addr[0] = w; -l!le ( w c_addr -- ) gforth l_store_le +le-l! ( w c_addr -- ) gforth l_store_le ""Store the bottom 32 bits of @i{w} at @i{c_addr} in big endian format."" -*(Tetrabyte*)(c_addr) = htole32(w); +c_addr[3] = w >> 24; +c_addr[2] = w >> 16; +c_addr[1] = w >> 8; +c_addr[0] = w; -x!le ( w c_addr -- ) gforth x_store_le +le-x! ( w c_addr -- ) gforth x_store_le ""Store the bottom 64 bits of @i{w} at @i{c_addr} in big endian format."" -*(Octabyte*)(c_addr) = htole64(w); +c_addr[7] = w >> 56; +c_addr[6] = w >> 48; +c_addr[5] = w >> 40; +c_addr[4] = w >> 32; +c_addr[3] = w >> 24; +c_addr[2] = w >> 16; +c_addr[1] = w >> 8; +c_addr[0] = w; -w@be ( c_addr -- u ) gforth w_fetch_be +be-w@ ( c_addr -- u ) gforth w_fetch_be ""@i{u} is the zero-extended 16-bit big endian value stored at @i{c_addr}."" -u = be16toh(*(UWyde*)(c_addr)); +u = (c_addr[0] << 8) | (c_addr[1]); -l@be ( c_addr -- u ) gforth l_fetch_be +be-l@ ( c_addr -- u ) gforth l_fetch_be ""@i{u} is the zero-extended 32-bit big endian value stored at @i{c_addr}."" -u = be32toh(*(UTetrabyte*)(c_addr)); +u = (c_addr[0] << 24) | (c_addr[1] << 16) | (c_addr[2] << 8) | (c_addr[3]); -x@be ( c_addr -- u ) gforth x_fetch_be +be-x@ ( c_addr -- u ) gforth x_fetch_be ""@i{u} is the zero-extended 64-bit big endian value stored at @i{c_addr}."" -u = be64toh(*(UOctabyte*)(c_addr)); +u = (((Cell)(c_addr[0]) << 56) | + ((Cell)(c_addr[1]) << 48) | + ((Cell)(c_addr[2]) << 40) | + ((Cell)(c_addr[3]) << 32) | + ((Cell)(c_addr[4]) << 24) | + ((Cell)(c_addr[5]) << 16) | + ((Cell)(c_addr[6]) << 8) | + ((Cell)(c_addr[7]))); -w@le ( c_addr -- u ) gforth w_fetch_le +le-w@ ( c_addr -- u ) gforth w_fetch_le ""@i{u} is the zero-extended 16-bit little endian value stored at @i{c_addr}."" -u = le16toh(*(UWyde*)(c_addr)); +u = (c_addr[1] << 8) | (c_addr[0]); -l@le ( c_addr -- u ) gforth l_fetch_le +le-l@ ( c_addr -- u ) gforth l_fetch_le ""@i{u} is the zero-extended 32-bit little endian value stored at @i{c_addr}."" -u = le32toh(*(UTetrabyte*)(c_addr)); +u = (c_addr[3] << 24) | (c_addr[2] << 16) | (c_addr[1] << 8) | (c_addr[0]); -x@le ( c_addr -- u ) gforth x_fetch_le +le-x@ ( c_addr -- u ) gforth x_fetch_le ""@i{u} is the zero-extended 64-bit little endian value stored at @i{c_addr}."" -u = le64toh(*(UOctabyte*)(c_addr)); +u = (((Cell)(c_addr[7]) << 56) | + ((Cell)(c_addr[6]) << 48) | + ((Cell)(c_addr[5]) << 40) | + ((Cell)(c_addr[4]) << 32) | + ((Cell)(c_addr[3]) << 24) | + ((Cell)(c_addr[2]) << 16) | + ((Cell)(c_addr[1]) << 8) | + ((Cell)(c_addr[0]))); \+ \g peephole