1/* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License, Version 1.0 only 6 * (the "License"). You may not use this file except in compliance 7 * with the License. 8 * 9 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10 * or http://www.opensolaris.org/os/licensing. 11 * See the License for the specific language governing permissions 12 * and limitations under the License. 13 * 14 * When distributing Covered Code, include this CDDL HEADER in each 15 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16 * If applicable, add the following below this CDDL HEADER, with the 17 * fields enclosed by brackets "[]" replaced with your own identifying 18 * information: Portions Copyright [yyyy] [name of copyright owner] 19 * 20 * CDDL HEADER END 21 */ 22 23/* 24 * Copyright 2006 Sun Microsystems, Inc. All rights reserved. 25 * Use is subject to license terms. 26 */ 27 28 .ident "%Z%%M% %I% %E% SMI" 29 30 .file "%M%" 31 32/* 33 * Assembler program to implement the following C program 34 * 35 * int 36 * abs(int arg) 37 * { 38 * return((arg < 0)? -arg: arg); 39 * } 40 */ 41 42#include <sys/asm_linkage.h> 43 44 ANSI_PRAGMA_WEAK(llabs,function) 45 46#include "SYS.h" 47 48 ENTRY(abs) 49 movl %edi, %eax 50 testl %eax, %eax /* arg < 0? */ 51 jns 1f 52 negl %eax /* yes, return -arg */ 531: 54 ret 55 SET_SIZE(abs) 56 57 ENTRY(labs) 58 movq %rdi, %rax 59 testq %rax, %rax /* arg < 0? */ 60 jns 1f 61 negq %rax /* yes, return -arg */ 621: 63 ret 64 SET_SIZE(labs) 65 66 ENTRY(llabs) 67 movq %rdi, %rax 68 testq %rax, %rax /* arg < 0? */ 69 jns 1f 70 negq %rax /* yes, return -arg */ 711: 72 ret 73 SET_SIZE(llabs) 74