1 diff -Naurp gcc/config/avr/avr.h gcc/config/avr/avr.h
2 --- gcc/config/avr/avr.h 2011-06-22 10:28:47.000000000 +0530
3 +++ gcc/config/avr/avr.h 2011-06-22 10:35:08.000000000 +0530
4 @@ -136,7 +136,7 @@ extern GTY(()) section *progmem_section;
5 #define AVR_2_BYTE_PC (!AVR_HAVE_EIJMP_EICALL)
6 #define AVR_3_BYTE_PC (AVR_HAVE_EIJMP_EICALL)
8 -#define AVR_IO_OFFSET (AVR_XMEGA ? 0 : 0x20)
9 +#define AVR_IO_OFFSET ((AVR_XMEGA || AVR_TINY) ? 0 : 0x20)
10 #define AVR_RAMPD_ADDR (AVR_XMEGA ? 0x38 : 0)
11 #define AVR_RAMPX_ADDR (AVR_XMEGA ? 0x39 : 0)
12 #define AVR_RAMPY_ADDR (AVR_XMEGA ? 0x3A : 0)
13 diff -Naurp gcc/config/avr/predicates.md gcc/config/avr/predicates.md
14 --- gcc/config/avr/predicates.md 2011-06-22 10:25:29.000000000 +0530
15 +++ gcc/config/avr/predicates.md 2011-06-22 10:35:08.000000000 +0530
17 ;; Return true if OP is a valid address for lower half of I/O space.
18 (define_predicate "low_io_address_operand"
19 (and (match_code "const_int")
20 - (if_then_else (match_test "AVR_XMEGA")
21 + (if_then_else (ior (match_test "AVR_XMEGA")
22 + (match_test "AVR_TINY"))
23 (match_test "IN_RANGE((INTVAL (op)), 0x00, 0x1F)")
24 (match_test "IN_RANGE((INTVAL (op)), 0x20, 0x3F)"))))
26 ;; Return true if OP is a valid address for high half of I/O space.
27 (define_predicate "high_io_address_operand"
28 (and (match_code "const_int")
29 - (if_then_else (match_test "AVR_XMEGA")
30 + (if_then_else (ior (match_test "AVR_XMEGA")
31 + (match_test "AVR_TINY"))
32 (match_test "IN_RANGE((INTVAL (op)), 0x20, 0x3F)")
33 (match_test "IN_RANGE((INTVAL (op)), 0x40, 0x5F)"))))
35 ;; Return true if OP is a valid address of I/O space.
36 (define_predicate "io_address_operand"
37 (and (match_code "const_int")
38 - (if_then_else (match_test "AVR_XMEGA")
39 + (if_then_else (ior (match_test "AVR_XMEGA")
40 + (match_test "AVR_TINY"))
41 (match_test "IN_RANGE((INTVAL (op)), 0x0, (0x40 - GET_MODE_SIZE(mode)))")
42 (match_test "IN_RANGE((INTVAL (op)), 0x20, (0x60 - GET_MODE_SIZE(mode)))"))))