From 5d88cef82bbf210ac6e371a3c2128e482e7314c8 Mon Sep 17 00:00:00 2001 From: Pirama Arumuga Nainar Date: Thu, 14 Feb 2019 11:54:10 -0800 Subject: [PATCH] Mark gglMulx and gglMulAddx as always_inline Bug: http://b/116873221 Bug: http://b/124451159 This is to get them building with O0 (needed for coverage builds). At O0, without the always_inline, the compiler is not able to reconcile the constraints in the inline assembly. In file included from system/core/libpixelflinger/trap.cpp:27: In file included from system/core/libpixelflinger/trap.h:22: In file included from system/core/libpixelflinger/include/private/pixelflinger/ggl_context.h:27: system/core/libpixelflinger/include/private/pixelflinger/ggl_fixed.h:113:9: error: invalid operand for inline asm constraint 'I' asm("smull %[lo], %[hi], %[x], %[y] \n" ^ system/core/libpixelflinger/include/private/pixelflinger/ggl_fixed.h:136:9: error: invalid operand for inline asm constraint 'I' asm("smull %[lo], %[hi], %[x], %[y] \n" ^ 2 errors generated. Test: m NATIVE_COVERAGE=true COVERAGE_PATHS=system/core/libpixelflinger Test: m Change-Id: Ia4516b19b957687b5fa25d2d100679abcec29366 --- libpixelflinger/include/private/pixelflinger/ggl_fixed.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/libpixelflinger/include/private/pixelflinger/ggl_fixed.h b/libpixelflinger/include/private/pixelflinger/ggl_fixed.h index 7f39e9b97..4217a8997 100644 --- a/libpixelflinger/include/private/pixelflinger/ggl_fixed.h +++ b/libpixelflinger/include/private/pixelflinger/ggl_fixed.h @@ -107,7 +107,7 @@ int32_t gglRecip28(GGLfixed x) { // inline ARM implementations inline GGLfixed gglMulx(GGLfixed x, GGLfixed y, int shift) CONST; -inline GGLfixed gglMulx(GGLfixed x, GGLfixed y, int shift) { +__attribute__((always_inline)) inline GGLfixed gglMulx(GGLfixed x, GGLfixed y, int shift) { GGLfixed result, t; if (__builtin_constant_p(shift)) { asm("smull %[lo], %[hi], %[x], %[y] \n" @@ -130,7 +130,8 @@ inline GGLfixed gglMulx(GGLfixed x, GGLfixed y, int shift) { } inline GGLfixed gglMulAddx(GGLfixed x, GGLfixed y, GGLfixed a, int shift) CONST; -inline GGLfixed gglMulAddx(GGLfixed x, GGLfixed y, GGLfixed a, int shift) { +__attribute__((always_inline)) inline GGLfixed gglMulAddx(GGLfixed x, GGLfixed y, GGLfixed a, + int shift) { GGLfixed result, t; if (__builtin_constant_p(shift)) { asm("smull %[lo], %[hi], %[x], %[y] \n"