| /* Check interwork between static functions for thumb2. */ |
| |
| /* { dg-do compile } */ |
| /* { dg-require-effective-target arm_arch_v7a_ok } */ |
| /* { dg-options "-O0 -march=armv7-a" } */ |
| |
| struct _NSPoint |
| { |
| float x; |
| float y; |
| }; |
| |
| typedef struct _NSPoint NSPoint; |
| |
| static NSPoint |
| __attribute__ ((target("arm"))) |
| NSMakePoint (float x, float y) |
| { |
| NSPoint point; |
| point.x = x; |
| point.y = y; |
| return point; |
| } |
| |
| static NSPoint |
| __attribute__ ((target("thumb"))) |
| RelativePoint (NSPoint point, NSPoint refPoint) |
| { |
| return NSMakePoint (refPoint.x + point.x, refPoint.y + point.y); |
| } |
| |
| NSPoint |
| __attribute__ ((target("arm"))) |
| g(NSPoint refPoint) |
| { |
| float pointA, pointB; |
| return RelativePoint (NSMakePoint (0, pointA), refPoint); |
| } |
| |
| /* { dg-final { scan-assembler-times "blx" 2 } } */ |