1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_SURFACE_FLINGER_CLZ_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 23a67932fe6864ac346e7f78b86df11cf6c5344137Mathias Agopianint inline clz(int32_t x) { 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return __builtin_clz(x); 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 2797c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopiantemplate <typename T> 2897c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopianstatic inline T min(T a, T b) { 2997c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian return a<b ? a : b; 3097c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian} 3197c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopiantemplate <typename T> 3297c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopianstatic inline T min(T a, T b, T c) { 3397c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian return min(a, min(b, c)); 3497c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian} 3597c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopiantemplate <typename T> 3697c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopianstatic inline T min(T a, T b, T c, T d) { 3797c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian return min(a, b, min(c, d)); 3897c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian} 3997c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian 4097c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopiantemplate <typename T> 4197c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopianstatic inline T max(T a, T b) { 4297c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian return a>b ? a : b; 4397c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian} 4497c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopiantemplate <typename T> 4597c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopianstatic inline T max(T a, T b, T c) { 4697c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian return max(a, max(b, c)); 4797c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian} 4897c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopiantemplate <typename T> 4997c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopianstatic inline T max(T a, T b, T c, T d) { 5097c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian return max(a, b, max(c, d)); 5197c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian} 5297c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian 5397c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopiantemplate <typename T> 5497c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopianstatic inline 5597c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopianvoid swap(T& a, T& b) { 5697c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian T t(a); 5797c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian a = b; 5897c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian b = t; 5997c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian} 6097c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian 6197c602c5af5f3ffd69009bf496d86347b71a2b4cMathias Agopian 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif /* ANDROID_SURFACE_FLINGER_CLZ_H */ 65