1 /* 2 * Copyright (C) 2008 The Android Open Source Project 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * * Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * * Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in 12 * the documentation and/or other materials provided with the 13 * distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 16 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 17 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 18 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 19 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, 21 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS 22 * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 23 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 24 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 25 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 26 * SUCH DAMAGE. 27 */ 28 29 #include <asm/unistd.h> 30 #include <machine/asm.h> 31 32 #define FUTEX_WAIT 0 33 #define FUTEX_WAKE 1 34 35 // __futex_syscall3(*ftx, op, val) 36 ENTRY(__futex_syscall3) 37 stmdb sp!, {r4, r7} 38 .save {r4, r7} 39 ldr r7, =__NR_futex 40 swi #0 41 ldmia sp!, {r4, r7} 42 bx lr 43 END(__futex_syscall3) 44 45 // __futex_syscall4(*ftx, op, val, *timespec) 46 ENTRY(__futex_syscall4) 47 b __futex_syscall3 48 END(__futex_syscall4) 49 50 // __futex_wait(*ftx, val, *timespec) 51 ENTRY(__futex_wait) 52 stmdb sp!, {r4, r7} 53 .save {r4, r7} 54 mov r3, r2 55 mov r2, r1 56 mov r1, #FUTEX_WAIT 57 ldr r7, =__NR_futex 58 swi #0 59 ldmia sp!, {r4, r7} 60 bx lr 61 END(__futex_wait) 62 63 // __futex_wake(*ftx, counter) 64 ENTRY(__futex_wake) 65 .save {r4, r7} 66 stmdb sp!, {r4, r7} 67 mov r2, r1 68 mov r1, #FUTEX_WAKE 69 ldr r7, =__NR_futex 70 swi #0 71 ldmia sp!, {r4, r7} 72 bx lr 73 END(__futex_wake) 74