1*5d9d9091SRichard Lowe/* 2*5d9d9091SRichard Lowe * CDDL HEADER START 3*5d9d9091SRichard Lowe * 4*5d9d9091SRichard Lowe * The contents of this file are subject to the terms of the 5*5d9d9091SRichard Lowe * Common Development and Distribution License, Version 1.0 only 6*5d9d9091SRichard Lowe * (the "License"). You may not use this file except in compliance 7*5d9d9091SRichard Lowe * with the License. 8*5d9d9091SRichard Lowe * 9*5d9d9091SRichard Lowe * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*5d9d9091SRichard Lowe * or http://www.opensolaris.org/os/licensing. 11*5d9d9091SRichard Lowe * See the License for the specific language governing permissions 12*5d9d9091SRichard Lowe * and limitations under the License. 13*5d9d9091SRichard Lowe * 14*5d9d9091SRichard Lowe * When distributing Covered Code, include this CDDL HEADER in each 15*5d9d9091SRichard Lowe * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*5d9d9091SRichard Lowe * If applicable, add the following below this CDDL HEADER, with the 17*5d9d9091SRichard Lowe * fields enclosed by brackets "[]" replaced with your own identifying 18*5d9d9091SRichard Lowe * information: Portions Copyright [yyyy] [name of copyright owner] 19*5d9d9091SRichard Lowe * 20*5d9d9091SRichard Lowe * CDDL HEADER END 21*5d9d9091SRichard Lowe */ 22*5d9d9091SRichard Lowe/* 23*5d9d9091SRichard Lowe * Copyright 1999-2002 Sun Microsystems, Inc. All rights reserved. 24*5d9d9091SRichard Lowe * Use is subject to license terms. 25*5d9d9091SRichard Lowe */ 26*5d9d9091SRichard Lowe 27*5d9d9091SRichard Lowe#pragma ident "%Z%%M% %I% %E% SMI" 28*5d9d9091SRichard Lowe 29*5d9d9091SRichard Lowe/* 30*5d9d9091SRichard Lowe * cb_srt0.s - cprboot startup code 31*5d9d9091SRichard Lowe */ 32*5d9d9091SRichard Lowe#include <sys/asm_linkage.h> 33*5d9d9091SRichard Lowe#include <sys/machthread.h> 34*5d9d9091SRichard Lowe#include <sys/privregs.h> 35*5d9d9091SRichard Lowe#include <sys/cpr_impl.h> 36*5d9d9091SRichard Lowe#include <sys/param.h> 37*5d9d9091SRichard Lowe#include <sys/mmu.h> 38*5d9d9091SRichard Lowe 39*5d9d9091SRichard Lowe#if defined(lint) 40*5d9d9091SRichard Lowe#include <sys/cpr.h> 41*5d9d9091SRichard Lowevoid *estack; 42*5d9d9091SRichard Lowecaddr_t _end[1]; 43*5d9d9091SRichard Lowe#endif 44*5d9d9091SRichard Lowe 45*5d9d9091SRichard Lowe#include "cprboot.h" 46*5d9d9091SRichard Lowe 47*5d9d9091SRichard Lowe 48*5d9d9091SRichard Lowe#if defined(lint) 49*5d9d9091SRichard Lowe 50*5d9d9091SRichard Lowe/* ARGSUSED */ 51*5d9d9091SRichard Lowevoid 52*5d9d9091SRichard Lowe_start(void *a, ...) 53*5d9d9091SRichard Lowe{} 54*5d9d9091SRichard Lowe 55*5d9d9091SRichard Lowe#else /* !lint */ 56*5d9d9091SRichard Lowe 57*5d9d9091SRichard Lowe .seg ".bss" 58*5d9d9091SRichard Lowe .align MMU_PAGESIZE 59*5d9d9091SRichard Lowe .skip CB_SSS 60*5d9d9091SRichard Loweeslave_stack: ! top of slave cpu stack 61*5d9d9091SRichard Lowe .skip CB_MSS 62*5d9d9091SRichard Loweestack: ! top of cprboot stack 63*5d9d9091SRichard Lowe .global estack 64*5d9d9091SRichard Lowe 65*5d9d9091SRichard Lowe .seg ".data" 66*5d9d9091SRichard Lowe .align 8 67*5d9d9091SRichard Lowelocal_cif: 68*5d9d9091SRichard Lowe .xword 0 ! space for prom cookie 69*5d9d9091SRichard Lowe 70*5d9d9091SRichard Lowe .seg ".text" 71*5d9d9091SRichard Lowe .align 8 72*5d9d9091SRichard Lowe 73*5d9d9091SRichard Lowe ! 74*5d9d9091SRichard Lowe ! regs on entry: 75*5d9d9091SRichard Lowe ! %o4 = prom cookie 76*5d9d9091SRichard Lowe ! 77*5d9d9091SRichard Lowe ENTRY(_start) 78*5d9d9091SRichard Lowe set estack - STACK_BIAS, %o5 79*5d9d9091SRichard Lowe save %o5, -SA(MINFRAME), %sp 80*5d9d9091SRichard Lowe 81*5d9d9091SRichard Lowe ! 82*5d9d9091SRichard Lowe ! clear the bss 83*5d9d9091SRichard Lowe ! 84*5d9d9091SRichard Lowe set _edata, %o0 85*5d9d9091SRichard Lowe set _end, %g2 86*5d9d9091SRichard Lowe call bzero 87*5d9d9091SRichard Lowe sub %g2, %o0, %o1 ! bss size = (_end - _edata) 88*5d9d9091SRichard Lowe 89*5d9d9091SRichard Lowe ! 90*5d9d9091SRichard Lowe ! Set pstate to a known state: 91*5d9d9091SRichard Lowe ! enable fp, privilege, interrupt enable 92*5d9d9091SRichard Lowe ! 93*5d9d9091SRichard Lowe wrpr %g0, PSTATE_PEF|PSTATE_PRIV|PSTATE_IE, %pstate 94*5d9d9091SRichard Lowe 95*5d9d9091SRichard Lowe ! 96*5d9d9091SRichard Lowe ! first stage 97*5d9d9091SRichard Lowe ! 98*5d9d9091SRichard Lowe set local_cif, %g2 99*5d9d9091SRichard Lowe stx %i4, [%g2] 100*5d9d9091SRichard Lowe mov %i4, %o0 ! SPARCV9/CIF 101*5d9d9091SRichard Lowe call main ! Mcprboot [tag] 102*5d9d9091SRichard Lowe mov 1, %o1 ! first=true 103*5d9d9091SRichard Lowe 104*5d9d9091SRichard Lowe ! 105*5d9d9091SRichard Lowe ! switch to new stack 106*5d9d9091SRichard Lowe ! 107*5d9d9091SRichard Lowe set CB_STACK_VIRT + CB_STACK_SIZE, %o5 108*5d9d9091SRichard Lowe sub %o5, STACK_BIAS + SA(MINFRAME), %sp 109*5d9d9091SRichard Lowe 110*5d9d9091SRichard Lowe ! 111*5d9d9091SRichard Lowe ! second stage 112*5d9d9091SRichard Lowe ! 113*5d9d9091SRichard Lowe set local_cif, %g2 114*5d9d9091SRichard Lowe ldx [%g2], %o0 ! SPARCV9/CIF 115*5d9d9091SRichard Lowe call main ! Mcprboot [tag] 116*5d9d9091SRichard Lowe mov 0, %o1 ! first=false 117*5d9d9091SRichard Lowe 118*5d9d9091SRichard Lowe call prom_exit_to_mon ! can't happen... :-) 119*5d9d9091SRichard Lowe nop 120*5d9d9091SRichard Lowe SET_SIZE(_start) 121*5d9d9091SRichard Lowe 122*5d9d9091SRichard Lowe#endif /* lint */ 123*5d9d9091SRichard Lowe 124*5d9d9091SRichard Lowe 125*5d9d9091SRichard Lowe#if defined(lint) 126*5d9d9091SRichard Lowe 127*5d9d9091SRichard Lowe/* 128*5d9d9091SRichard Lowe * args from cprboot main: 129*5d9d9091SRichard Lowe * %o0 prom cookie 130*5d9d9091SRichard Lowe * %o1 struct sun4u_machdep *mdp 131*5d9d9091SRichard Lowe * 132*5d9d9091SRichard Lowe * Any change to this register assignment requires 133*5d9d9091SRichard Lowe * changes to uts/sun4u/ml/cpr_resume_setup.s 134*5d9d9091SRichard Lowe */ 135*5d9d9091SRichard Lowe 136*5d9d9091SRichard Lowe/* ARGSUSED */ 137*5d9d9091SRichard Lowevoid 138*5d9d9091SRichard Loweexit_to_kernel(void *cookie, csu_md_t *mdp) 139*5d9d9091SRichard Lowe{} 140*5d9d9091SRichard Lowe 141*5d9d9091SRichard Lowe#else /* lint */ 142*5d9d9091SRichard Lowe 143*5d9d9091SRichard Lowe ENTRY(exit_to_kernel) 144*5d9d9091SRichard Lowe ! 145*5d9d9091SRichard Lowe ! setup temporary stack and adjust 146*5d9d9091SRichard Lowe ! by the saved kernel stack bias 147*5d9d9091SRichard Lowe ! 148*5d9d9091SRichard Lowe set tmp_stack, %g1 ! g1 = &tmp_stack 149*5d9d9091SRichard Lowe ldx [%g1], %l2 ! l2 = tmp_stack 150*5d9d9091SRichard Lowe sub %l2, SA(MINFRAME), %l2 151*5d9d9091SRichard Lowe ld [%o1 + CPR_MD_KSB], %l4 ! mdp->ksb 152*5d9d9091SRichard Lowe sub %l2, %l4, %sp 153*5d9d9091SRichard Lowe 154*5d9d9091SRichard Lowe ! 155*5d9d9091SRichard Lowe ! set pstate and wstate from saved values 156*5d9d9091SRichard Lowe ! 157*5d9d9091SRichard Lowe lduh [%o1 + CPR_MD_KPSTATE], %l4 ! l4 = mdp->kpstate 158*5d9d9091SRichard Lowe wrpr %g0, %l4, %pstate 159*5d9d9091SRichard Lowe lduh [%o1 + CPR_MD_KWSTATE], %l4 ! l4 = mdp->kwstate 160*5d9d9091SRichard Lowe wrpr %g0, %l4, %wstate 161*5d9d9091SRichard Lowe 162*5d9d9091SRichard Lowe ! 163*5d9d9091SRichard Lowe ! jump to kernel with %o0 and %o1 unchanged 164*5d9d9091SRichard Lowe ! 165*5d9d9091SRichard Lowe ldx [%o1 + CPR_MD_FUNC], %l3 ! l3 = mdp->func 166*5d9d9091SRichard Lowe jmpl %l3, %g0 167*5d9d9091SRichard Lowe nop 168*5d9d9091SRichard Lowe 169*5d9d9091SRichard Lowe /* there is no return from here */ 170*5d9d9091SRichard Lowe unimp 0 171*5d9d9091SRichard Lowe SET_SIZE(exit_to_kernel) 172*5d9d9091SRichard Lowe 173*5d9d9091SRichard Lowe#endif /* lint */ 174*5d9d9091SRichard Lowe 175*5d9d9091SRichard Lowe 176*5d9d9091SRichard Lowe#if defined(lint) 177*5d9d9091SRichard Lowe 178*5d9d9091SRichard Lowe/* ARGSUSED */ 179*5d9d9091SRichard Loweint 180*5d9d9091SRichard Loweclient_handler(void *cif_handler, void *arg_array) 181*5d9d9091SRichard Lowe{ return (0); } 182*5d9d9091SRichard Lowe 183*5d9d9091SRichard Lowe#else 184*5d9d9091SRichard Lowe 185*5d9d9091SRichard Lowe ! 186*5d9d9091SRichard Lowe ! 64/64 client interface for ieee1275 prom 187*5d9d9091SRichard Lowe ! 188*5d9d9091SRichard Lowe ENTRY(client_handler) 189*5d9d9091SRichard Lowe mov %o7, %g1 190*5d9d9091SRichard Lowe mov %o0, %g5 191*5d9d9091SRichard Lowe mov %o1, %o0 192*5d9d9091SRichard Lowe jmp %g5 193*5d9d9091SRichard Lowe mov %g1, %o7 194*5d9d9091SRichard Lowe SET_SIZE(client_handler) 195*5d9d9091SRichard Lowe 196*5d9d9091SRichard Lowe#endif /* lint */ 197*5d9d9091SRichard Lowe 198*5d9d9091SRichard Lowe 199*5d9d9091SRichard Lowe#if defined(lint) 200*5d9d9091SRichard Lowe 201*5d9d9091SRichard Lowe/* ARGSUSED */ 202*5d9d9091SRichard Lowevoid 203*5d9d9091SRichard Lowebzero(void *base, size_t len) 204*5d9d9091SRichard Lowe{} 205*5d9d9091SRichard Lowe 206*5d9d9091SRichard Lowe#else 207*5d9d9091SRichard Lowe 208*5d9d9091SRichard Lowe ENTRY(bzero) 209*5d9d9091SRichard Lowe brz,pn %o1, 2f 210*5d9d9091SRichard Lowe nop 211*5d9d9091SRichard Lowe mov %o0, %o2 212*5d9d9091SRichard Lowe mov %o1, %o3 213*5d9d9091SRichard Lowe1: 214*5d9d9091SRichard Lowe stub %g0, [%o2] 215*5d9d9091SRichard Lowe dec %o3 216*5d9d9091SRichard Lowe brgz,pt %o3, 1b 217*5d9d9091SRichard Lowe inc %o2 218*5d9d9091SRichard Lowe2: 219*5d9d9091SRichard Lowe retl 220*5d9d9091SRichard Lowe nop 221*5d9d9091SRichard Lowe SET_SIZE(bzero) 222*5d9d9091SRichard Lowe 223*5d9d9091SRichard Lowe#endif /* lint */ 224*5d9d9091SRichard Lowe 225*5d9d9091SRichard Lowe 226*5d9d9091SRichard Lowe#if defined(lint) 227*5d9d9091SRichard Lowe 228*5d9d9091SRichard Lowe/* ARGSUSED */ 229*5d9d9091SRichard Lowevoid 230*5d9d9091SRichard Lowephys_xcopy(physaddr_t phys_src, physaddr_t phys_dst, size_t len) 231*5d9d9091SRichard Lowe{} 232*5d9d9091SRichard Lowe 233*5d9d9091SRichard Lowe#else 234*5d9d9091SRichard Lowe 235*5d9d9091SRichard Lowe ! 236*5d9d9091SRichard Lowe ! copy len bytes from src to dst phys addrs; 237*5d9d9091SRichard Lowe ! requires src/dst/len 8-byte alignment; 238*5d9d9091SRichard Lowe ! used only for copying phys pages 239*5d9d9091SRichard Lowe ! 240*5d9d9091SRichard Lowe ENTRY(phys_xcopy) 241*5d9d9091SRichard Lowe brz,pn %o2, 2f 242*5d9d9091SRichard Lowe mov %o0, %o3 ! %o3 = src 243*5d9d9091SRichard Lowe mov %o1, %o4 ! %o4 = dst 244*5d9d9091SRichard Lowe1: 245*5d9d9091SRichard Lowe ldxa [%o3]ASI_MEM, %o5 ! %o5 = *src 246*5d9d9091SRichard Lowe stxa %o5, [%o4]ASI_MEM ! *dst = %o5 247*5d9d9091SRichard Lowe dec 8, %o2 ! len -= 8 248*5d9d9091SRichard Lowe inc 8, %o3 ! src += 8 249*5d9d9091SRichard Lowe brgz,pt %o2, 1b ! branch when (len > 0) 250*5d9d9091SRichard Lowe inc 8, %o4 ! dst += 8 251*5d9d9091SRichard Lowe2: 252*5d9d9091SRichard Lowe retl 253*5d9d9091SRichard Lowe nop 254*5d9d9091SRichard Lowe SET_SIZE(phys_xcopy) 255*5d9d9091SRichard Lowe 256*5d9d9091SRichard Lowe#endif 257*5d9d9091SRichard Lowe 258*5d9d9091SRichard Lowe 259*5d9d9091SRichard Lowe#if defined(lint) 260*5d9d9091SRichard Lowe 261*5d9d9091SRichard Lowe/* ARGSUSED */ 262*5d9d9091SRichard Lowevoid 263*5d9d9091SRichard Loweget_dtlb_entry(int index, caddr_t *vaddrp, tte_t *tte) 264*5d9d9091SRichard Lowe{} 265*5d9d9091SRichard Lowe 266*5d9d9091SRichard Lowe#else /* lint */ 267*5d9d9091SRichard Lowe 268*5d9d9091SRichard Lowe ENTRY(get_dtlb_entry) 269*5d9d9091SRichard Lowe sllx %o0, 3, %o0 270*5d9d9091SRichard Lowe ldxa [%o0]ASI_DTLB_ACCESS, %o3 271*5d9d9091SRichard Lowe stx %o3, [%o2] 272*5d9d9091SRichard Lowe ldxa [%o0]ASI_DTLB_TAGREAD, %o4 273*5d9d9091SRichard Lowe retl 274*5d9d9091SRichard Lowe stx %o4, [%o1] 275*5d9d9091SRichard Lowe SET_SIZE(get_dtlb_entry) 276*5d9d9091SRichard Lowe 277*5d9d9091SRichard Lowe#endif 278*5d9d9091SRichard Lowe 279*5d9d9091SRichard Lowe 280*5d9d9091SRichard Lowe#if defined(lint) 281*5d9d9091SRichard Lowe 282*5d9d9091SRichard Lowe/* ARGSUSED */ 283*5d9d9091SRichard Lowevoid 284*5d9d9091SRichard Loweset_itlb_entry(int index, caddr_t vaddr, tte_t *tte) 285*5d9d9091SRichard Lowe{} 286*5d9d9091SRichard Lowe 287*5d9d9091SRichard Lowe/* ARGSUSED */ 288*5d9d9091SRichard Lowevoid 289*5d9d9091SRichard Loweset_dtlb_entry(int index, caddr_t vaddr, tte_t *tte) 290*5d9d9091SRichard Lowe{} 291*5d9d9091SRichard Lowe 292*5d9d9091SRichard Lowe#else /* lint */ 293*5d9d9091SRichard Lowe 294*5d9d9091SRichard Lowe ENTRY(set_dtlb_entry) 295*5d9d9091SRichard Lowe sllx %o0, 3, %o0 296*5d9d9091SRichard Lowe srlx %o1, MMU_PAGESHIFT, %o1 297*5d9d9091SRichard Lowe sllx %o1, MMU_PAGESHIFT, %o1 298*5d9d9091SRichard Lowe set MMU_TAG_ACCESS, %o4 299*5d9d9091SRichard Lowe ldx [%o2], %o3 300*5d9d9091SRichard Lowe stxa %o1, [%o4]ASI_DMMU 301*5d9d9091SRichard Lowe stxa %o3, [%o0]ASI_DTLB_ACCESS 302*5d9d9091SRichard Lowe membar #Sync 303*5d9d9091SRichard Lowe retl 304*5d9d9091SRichard Lowe nop 305*5d9d9091SRichard Lowe SET_SIZE(set_dtlb_entry) 306*5d9d9091SRichard Lowe 307*5d9d9091SRichard Lowe ENTRY(set_itlb_entry) 308*5d9d9091SRichard Lowe sllx %o0, 3, %o0 309*5d9d9091SRichard Lowe srlx %o1, MMU_PAGESHIFT, %o1 310*5d9d9091SRichard Lowe sllx %o1, MMU_PAGESHIFT, %o1 311*5d9d9091SRichard Lowe set MMU_TAG_ACCESS, %o4 312*5d9d9091SRichard Lowe ldx [%o2], %o3 313*5d9d9091SRichard Lowe stxa %o1, [%o4]ASI_IMMU 314*5d9d9091SRichard Lowe stxa %o3, [%o0]ASI_ITLB_ACCESS 315*5d9d9091SRichard Lowe membar #Sync 316*5d9d9091SRichard Lowe retl 317*5d9d9091SRichard Lowe nop 318*5d9d9091SRichard Lowe SET_SIZE(set_itlb_entry) 319*5d9d9091SRichard Lowe 320*5d9d9091SRichard Lowe#endif 321*5d9d9091SRichard Lowe 322*5d9d9091SRichard Lowe 323*5d9d9091SRichard Lowe#if defined(lint) 324*5d9d9091SRichard Lowe 325*5d9d9091SRichard Loweuint_t 326*5d9d9091SRichard Lowegetmid(void) 327*5d9d9091SRichard Lowe{ return (0); } 328*5d9d9091SRichard Lowe 329*5d9d9091SRichard Lowe#else /* lint */ 330*5d9d9091SRichard Lowe 331*5d9d9091SRichard Lowe ENTRY(getmid) 332*5d9d9091SRichard Lowe CPU_INDEX(%o0, %o1) 333*5d9d9091SRichard Lowe retl 334*5d9d9091SRichard Lowe nop 335*5d9d9091SRichard Lowe SET_SIZE(getmid) 336*5d9d9091SRichard Lowe 337*5d9d9091SRichard Lowe#endif 338*5d9d9091SRichard Lowe 339*5d9d9091SRichard Lowe 340*5d9d9091SRichard Lowe#if defined(lint) 341*5d9d9091SRichard Lowe 342*5d9d9091SRichard Lowe/* ARGSUSED */ 343*5d9d9091SRichard Lowevoid 344*5d9d9091SRichard Lowecpu_launch(int cpuid) 345*5d9d9091SRichard Lowe{ 346*5d9d9091SRichard Lowe slave_init(cpuid); 347*5d9d9091SRichard Lowe} 348*5d9d9091SRichard Lowe 349*5d9d9091SRichard Lowe#else /* lint */ 350*5d9d9091SRichard Lowe 351*5d9d9091SRichard Lowe ENTRY(cpu_launch) 352*5d9d9091SRichard Lowe set CB_STACK_VIRT + CB_SSS, %o5 353*5d9d9091SRichard Lowe sub %o5, STACK_BIAS + SA(MINFRAME), %sp 354*5d9d9091SRichard Lowe wrpr %g0, PSTATE_PEF|PSTATE_PRIV|PSTATE_IE, %pstate 355*5d9d9091SRichard Lowe call slave_init 356*5d9d9091SRichard Lowe nop 357*5d9d9091SRichard Lowe unimp 0 358*5d9d9091SRichard Lowe SET_SIZE(cpu_launch) 359*5d9d9091SRichard Lowe 360*5d9d9091SRichard Lowe#endif 361*5d9d9091SRichard Lowe 362*5d9d9091SRichard Lowe 363*5d9d9091SRichard Lowe#if defined(lint) 364*5d9d9091SRichard Lowe 365*5d9d9091SRichard Lowevoid 366*5d9d9091SRichard Lowemembar_stld(void) 367*5d9d9091SRichard Lowe{} 368*5d9d9091SRichard Lowe 369*5d9d9091SRichard Lowe#else /* lint */ 370*5d9d9091SRichard Lowe 371*5d9d9091SRichard Lowe ENTRY(membar_stld) 372*5d9d9091SRichard Lowe retl 373*5d9d9091SRichard Lowe membar #StoreLoad 374*5d9d9091SRichard Lowe SET_SIZE(membar_stld) 375*5d9d9091SRichard Lowe 376*5d9d9091SRichard Lowe#endif 377*5d9d9091SRichard Lowe 378*5d9d9091SRichard Lowe 379*5d9d9091SRichard Lowe#if defined(lint) 380*5d9d9091SRichard Lowe 381*5d9d9091SRichard Lowe/* ARGSUSED */ 382*5d9d9091SRichard Lowevoid 383*5d9d9091SRichard Lowecb_usec_wait(int usecs) 384*5d9d9091SRichard Lowe{} 385*5d9d9091SRichard Lowe 386*5d9d9091SRichard Lowe#else 387*5d9d9091SRichard Lowe 388*5d9d9091SRichard Lowe .align 32 ! cache alignment for next 8 instr 389*5d9d9091SRichard Lowe ENTRY(cb_usec_wait) 390*5d9d9091SRichard Lowe 391*5d9d9091SRichard Lowe sethi %hi(cpu_delay), %o1 392*5d9d9091SRichard Lowe ld [%o1 + %lo(cpu_delay)], %o1 393*5d9d9091SRichard Lowe mov %o1, %o2 394*5d9d9091SRichard Lowe1: brnz,pt %o2, 1b ! usec countdown loop 395*5d9d9091SRichard Lowe dec %o2 ! 2 instr in loop 396*5d9d9091SRichard Lowe 397*5d9d9091SRichard Lowe dec %o0 ! for each usec: 398*5d9d9091SRichard Lowe brgz,pt %o0, 1b ! run the above loop 399*5d9d9091SRichard Lowe mov %o1, %o2 400*5d9d9091SRichard Lowe 401*5d9d9091SRichard Lowe retl 402*5d9d9091SRichard Lowe nop 403*5d9d9091SRichard Lowe SET_SIZE(cb_usec_wait) 404*5d9d9091SRichard Lowe 405*5d9d9091SRichard Lowe#endif 406