1*7c478bd9Sstevel@tonic-gate/* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate/* 23*7c478bd9Sstevel@tonic-gate * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24*7c478bd9Sstevel@tonic-gate * Use is subject to license terms. 25*7c478bd9Sstevel@tonic-gate */ 26*7c478bd9Sstevel@tonic-gate 27*7c478bd9Sstevel@tonic-gate .ident "%Z%%M% %I% %E% SMI" 28*7c478bd9Sstevel@tonic-gate 29*7c478bd9Sstevel@tonic-gate .file "muldiv.s" 30*7c478bd9Sstevel@tonic-gate 31*7c478bd9Sstevel@tonic-gate#include <SYS.h> 32*7c478bd9Sstevel@tonic-gate 33*7c478bd9Sstevel@tonic-gate ENTRY(.udiv) 34*7c478bd9Sstevel@tonic-gate wr %g0, %g0, %y 35*7c478bd9Sstevel@tonic-gate nop 36*7c478bd9Sstevel@tonic-gate nop 37*7c478bd9Sstevel@tonic-gate mov %o0, %o3 ! o3 gets remainder 38*7c478bd9Sstevel@tonic-gate udiv %o0, %o1, %o0 ! o0 contains quotient a/b 39*7c478bd9Sstevel@tonic-gate umul %o0, %o1, %o4 ! o4 contains q*b 40*7c478bd9Sstevel@tonic-gate retl 41*7c478bd9Sstevel@tonic-gate sub %o3, %o4, %o3 ! o3 gets a-q*b 42*7c478bd9Sstevel@tonic-gate SET_SIZE(.udiv) 43*7c478bd9Sstevel@tonic-gate 44*7c478bd9Sstevel@tonic-gate ENTRY(.div) 45*7c478bd9Sstevel@tonic-gate sra %o0,31,%o4 ! extend sign 46*7c478bd9Sstevel@tonic-gate wr %o4,%g0,%y 47*7c478bd9Sstevel@tonic-gate cmp %o1,0xffffffff ! is divisor -1? 48*7c478bd9Sstevel@tonic-gate be,a 1f ! if yes 49*7c478bd9Sstevel@tonic-gate subcc %g0,%o0,%o0 ! simply negate dividend 50*7c478bd9Sstevel@tonic-gate mov %o0,%o3 ! o3 gets remainder 51*7c478bd9Sstevel@tonic-gate sdiv %o0,%o1,%o0 ! o0 contains quotient a/b 52*7c478bd9Sstevel@tonic-gate smul %o0,%o1,%o4 ! o4 contains q*b 53*7c478bd9Sstevel@tonic-gate retl 54*7c478bd9Sstevel@tonic-gate sub %o3,%o4,%o3 ! o3 gets a-q*b 55*7c478bd9Sstevel@tonic-gate1: 56*7c478bd9Sstevel@tonic-gate retl 57*7c478bd9Sstevel@tonic-gate mov %g0,%o3 ! remainder is 0 58*7c478bd9Sstevel@tonic-gate SET_SIZE(.div) 59