Rémy Oudompheng | 8f3c205 | 2012-09-01 16:40:54 +0200 | [diff] [blame] | 1 | // run |
Russ Cox | ce69666 | 2012-05-24 14:50:36 -0400 | [diff] [blame] | 2 | |
| 3 | // Test for 8g register move bug. The optimizer gets confused |
| 4 | // about 16- vs 32-bit moves during splitContractIndex. |
| 5 | |
Rémy Oudompheng | 8f3c205 | 2012-09-01 16:40:54 +0200 | [diff] [blame] | 6 | // Issue 3910. |
| 7 | |
Russ Cox | ce69666 | 2012-05-24 14:50:36 -0400 | [diff] [blame] | 8 | package main |
| 9 | |
| 10 | func main() { |
| 11 | const c = 0x12345678 |
| 12 | index, n, offset := splitContractIndex(c) |
Rémy Oudompheng | 8f3c205 | 2012-09-01 16:40:54 +0200 | [diff] [blame] | 13 | if index != int((c&0xffff)>>5) || n != int(c&(1<<5-1)) || offset != (c>>16)&(1<<14-1) { |
Russ Cox | ce69666 | 2012-05-24 14:50:36 -0400 | [diff] [blame] | 14 | println("BUG", index, n, offset) |
| 15 | } |
| 16 | } |
| 17 | |
| 18 | func splitContractIndex(ce uint32) (index, n, offset int) { |
| 19 | h := uint16(ce) |
| 20 | return int(h >> 5), int(h & (1<<5 - 1)), int(ce>>16) & (1<<14 - 1) |
| 21 | } |