--- /dev/null
+// Betting on GCC aligning this for efficiency.\r
+#include <stdio.h>\r
+\r
+int main()\r
+{\r
+ unsigned short int read_16 = 0xF1F2;\r
+ unsigned int read_32 = 0xF1F2F3F4;\r
+\r
+ unsigned short int write_16 = 0xF00D;\r
+ unsigned int write_32 = 0xF00DFEED;\r
+ // 16bit unsigned reads, we expect 0xF1F2 and 0xF20000F1\r
+ fprintf(stderr, "%04x %04x\n",\r
+ *((unsigned short int *)((char *)&read_16)),\r
+ *((unsigned short int *)((char *)&read_16 + 1)));\r
+\r
+ // 16bit signed reads, we expect 0xFFFFF1F2 and 0xFFFFFFF1\r
+ fprintf(stderr, "%04x %04x\n",\r
+ *((short int *)((char *)&read_16)),\r
+ *((short int *)((char *)&read_16 + 1)));\r
+\r
+ // 32bit reads, we expect 0xF1F2F3F4, 0xF4F1F2F3, 0xF3F4F1F2,\r
+ // and 0xF2F3F4F1\r
+\r
+ fprintf(stderr, "%08x %08x %08x %08x\n",\r
+ *((int *)((char *)&read_32)),\r
+ *((int *)((char *)&read_32 + 1)),\r
+ *((int *)((char *)&read_32 + 2)),\r
+ *((int *)((char *)&read_32 + 3)));\r
+\r
+ // 16bit writes, we expect write_16 to remain 0xF00D\r
+\r
+ *((short int *)((char *)&write_16)) = 0xF00D;\r
+ *((short int *)((char *)&write_16) + 1) = 0xF00D;\r
+\r
+ fprintf(stderr, "%04x\n", write_16);\r
+\r
+ // 32bit writes, we expect write_32 to remain 0xF00DFEED\r
+\r
+ *((int *)((char *)&write_16)) = 0xF00DFEED;\r
+ *((int *)((char *)&write_16) + 1) = 0xF00DFEED;\r
+ *((int *)((char *)&write_16) + 2) = 0xF00DFEED;\r
+ *((int *)((char *)&write_16) + 3) = 0xF00DFEED;\r
+\r
+ fprintf(stderr, "%08x\n", write_32);\r
+\r
+ return 0;\r
+}\r
+\r