Skip to content

Instantly share code, notes, and snippets.

@Alcaro
Created August 12, 2016 17:05
Show Gist options
  • Save Alcaro/d90daf1008e1e1c76a800f8116ff7c8a to your computer and use it in GitHub Desktop.
Save Alcaro/d90daf1008e1e1c76a800f8116ff7c8a to your computer and use it in GitHub Desktop.
assume DRAM is constant endian
u8[] DRAM = {1,2,3,4}
big endian
pix = *(int32_t *)(DRAM + addr); - pix = 1234
argb[1 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 24); - argb[1] = 1
argb[2 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 16); - argb[2] = 2
argb[3 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 8); - argb[3] = 3
argb[0 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 0); - argb[0] = 4, argb[]={4,1,2,3}
scanline[i] = *(int32_t *)(argb); - scanline = 4123
u8[] DRAM = {1,2,3,4}
little endian
pix = *(int32_t *)(DRAM + addr); - pix = 4321
argb[1 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 24); - argb[2] = 4
argb[2 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 16); - argb[1] = 3
argb[3 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 8); - argb[0] = 2
argb[0 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 0); - argb[3] = 1, argb[]={2,3,4,1}
scanline[i] = *(int32_t *)(argb); - scanline = 1432
not equal, assumption is false
assume DRAM is host endian
u8[] DRAM = {1,2,3,4}
big endian
pix = *(int32_t *)(DRAM + addr); - pix = 1234
argb[1 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 24); - argb[1] = 1
argb[2 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 16); - argb[2] = 2
argb[3 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 8); - argb[3] = 3
argb[0 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 0); - argb[0] = 4, argb[]={4,1,2,3}
scanline[i] = *(int32_t *)(argb); - scanline = 4123
u8[] DRAM = {4,3,2,1}
little endian
pix = *(int32_t *)(DRAM + addr); - pix = 1234
argb[1 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 24); - argb[2] = 1
argb[2 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 16); - argb[1] = 2
argb[3 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 8); - argb[0] = 3
argb[0 ^ BYTE_ADDR_XOR] = (unsigned char)(pix >> 0); - argb[3] = 4, argb[]={3,2,1,4}
scanline[i] = *(int32_t *)(argb); - scanline = 4123
equal, assumption is reasonable (and all other possible assumptions are false)
and scanline is a u32 array, so its endian isn't relevant
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment