If you want to guarantee the read ordering, then the two reads need to be separated by a sequence point; i.e. they need to be separate statements, like:

```C++
report->y_raw = read_reg(ADDR_ACC_X_LSB);
report->y_raw |= read_reg(ADDR_ACC_X_LSB + 1) << 8;
```

etc. There is no guarantee of arithmetic expression ordering.