1 /* With the -munaligned-symbols option all external and weak symbols
2 without explicit alignment are assumed to be potentially unaligned
3 and therefore cannot be accessed with larl. */
5 /* { dg-do compile } */
6 /* { dg-options "-O3 -march=z900 -fno-section-anchors -munaligned-symbols" } */
8 extern unsigned char extern_char
;
9 extern unsigned char extern_explicitly_aligned_char
__attribute__((aligned(2)));
10 extern unsigned char extern_explicitly_unaligned_char
__attribute__((aligned(1)));
11 extern unsigned char __attribute__((weak
)) extern_weak_char
;
12 extern unsigned char extern_explicitly_aligned_weak_char
__attribute__((weak
,aligned(2)));
13 extern unsigned char extern_explicitly_unaligned_weak_char
__attribute__((weak
,aligned(1)));
15 unsigned char normal_char
;
16 unsigned char explicitly_unaligned_char
__attribute__((aligned(1)));
17 unsigned char __attribute__((weak
)) weak_char
= 0;
18 unsigned char explicitly_aligned_weak_char
__attribute__((weak
,aligned(2)));
19 unsigned char explicitly_unaligned_weak_char
__attribute__((weak
,aligned(1)));
21 extern unsigned int extern_int
;
22 extern unsigned int extern_explicitly_aligned_int
__attribute__((aligned(4)));
23 extern unsigned int extern_explicitly_unaligned_int
__attribute__((aligned(1)));
24 extern unsigned int __attribute__((weak
)) extern_weak_int
;
25 extern unsigned int extern_explicitly_aligned_weak_int
__attribute__((weak
,aligned(4)));
26 extern unsigned int extern_explicitly_unaligned_weak_int
__attribute__((weak
,aligned(1)));
28 unsigned int normal_int
;
29 unsigned int explicitly_unaligned_int
__attribute__((aligned(1)));
30 unsigned int __attribute__((weak
)) weak_int
= 0;
31 unsigned int explicitly_aligned_weak_int
__attribute__((weak
,aligned(4)));
32 unsigned int explicitly_unaligned_weak_int
__attribute__((weak
,aligned(1)));
34 extern const void extern_void
;
35 extern const void extern_explicitly_aligned_void
__attribute__((aligned(2)));
36 extern const void extern_explicitly_unaligned_void
__attribute__((aligned(1)));
37 extern const void __attribute__((weak
)) extern_weak_void
;
38 extern const void extern_explicitly_aligned_weak_void
__attribute__((weak
,aligned(2)));
39 extern const void extern_explicitly_unaligned_weak_void
__attribute__((weak
,aligned(1)));
45 return extern_char
+ extern_explicitly_aligned_char
46 + extern_explicitly_unaligned_char
47 + extern_weak_char
+ extern_explicitly_aligned_weak_char
48 + extern_explicitly_unaligned_weak_char
50 + normal_char
+ explicitly_unaligned_char
51 + weak_char
+ explicitly_aligned_weak_char
52 + explicitly_unaligned_weak_char
54 + extern_int
+ extern_explicitly_aligned_int
55 + extern_explicitly_unaligned_int
56 + extern_weak_int
+ extern_explicitly_aligned_weak_int
57 + extern_explicitly_unaligned_weak_int
59 + normal_int
+ explicitly_unaligned_int
60 + weak_int
+ explicitly_aligned_weak_int
61 + explicitly_unaligned_weak_int
;
64 const void *f1(void) { return &extern_void
; }
65 const void *f2(void) { return &extern_explicitly_aligned_void
; }
66 const void *f3(void) { return &extern_explicitly_unaligned_void
; }
67 const void *f4(void) { return &extern_weak_void
; }
68 const void *f5(void) { return &extern_explicitly_aligned_weak_void
; }
69 const void *f6(void) { return &extern_explicitly_unaligned_weak_void
; }
72 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_char\n" 0 } } */
73 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_char\n" 1 } } */
74 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_char\n" 0 } } */
75 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_weak_char\n" 0 } } */
76 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_weak_char\n" 1 } } */
77 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_weak_char\n" 0 } } */
79 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,normal_char\n" 1 } } */
80 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_char\n" 0 } } */
81 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,weak_char\n" 0 } } */
82 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_aligned_weak_char\n" 1 } } */
83 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_weak_char\n" 0 } } */
85 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_int\n" 1 } } */
86 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_int\n" 1 } } */
87 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_int\n" 0 } } */
88 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_weak_int\n" 1 } } */
89 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_weak_int\n" 1 } } */
90 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_weak_int\n" 0 } } */
92 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,normal_int\n" 1 } } */
93 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_int\n" 0 } } */
94 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,weak_int\n" 1 } } */
95 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_aligned_weak_int\n" 1 } } */
96 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,explicitly_unaligned_weak_int\n" 0 } } */
98 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_void\n" 0 } } */
99 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_void\n" 1 } } */
100 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_void\n" 0 } } */
101 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_weak_void\n" 0 } } */
102 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_aligned_weak_void\n" 1 } } */
103 /* { dg-final { scan-assembler-times "larl\t%r\[0-9\]*,extern_explicitly_unaligned_weak_void\n" 0 } } */