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 2004 Sun Microsystems, Inc. All rights reserved. 24*5d9d9091SRichard Lowe * Use is subject to license terms. 25*5d9d9091SRichard Lowe */ 26*5d9d9091SRichard Lowe 27*5d9d9091SRichard Lowe#if defined(__lint) 28*5d9d9091SRichard Lowe#include <kmdb/kmdb_asmutil.h> 29*5d9d9091SRichard Lowe#endif 30*5d9d9091SRichard Lowe 31*5d9d9091SRichard Lowe#include <sys/asm_linkage.h> 32*5d9d9091SRichard Lowe 33*5d9d9091SRichard Lowe#if defined(__lint) 34*5d9d9091SRichard Lowe/*ARGSUSED*/ 35*5d9d9091SRichard Loweuintptr_t 36*5d9d9091SRichard Lowecas(uintptr_t *rs1, uintptr_t rs2, uintptr_t rd) 37*5d9d9091SRichard Lowe{ 38*5d9d9091SRichard Lowe return (0); 39*5d9d9091SRichard Lowe} 40*5d9d9091SRichard Lowe#else 41*5d9d9091SRichard Lowe 42*5d9d9091SRichard Lowe ENTRY_NP(cas) 43*5d9d9091SRichard Lowe movq %rsi, %rax 44*5d9d9091SRichard Lowe lock 45*5d9d9091SRichard Lowe cmpxchgq %rdx, (%rdi) 46*5d9d9091SRichard Lowe ret 47*5d9d9091SRichard Lowe SET_SIZE(cas) 48*5d9d9091SRichard Lowe#endif 49*5d9d9091SRichard Lowe 50*5d9d9091SRichard Lowe#if defined(__lint) 51*5d9d9091SRichard Lowevoid 52*5d9d9091SRichard Lowemembar_producer(void) 53*5d9d9091SRichard Lowe{ 54*5d9d9091SRichard Lowe} 55*5d9d9091SRichard Lowe#else 56*5d9d9091SRichard Lowe 57*5d9d9091SRichard Lowe ENTRY(membar_producer) 58*5d9d9091SRichard Lowe sfence 59*5d9d9091SRichard Lowe ret 60*5d9d9091SRichard Lowe SET_SIZE(membar_producer) 61*5d9d9091SRichard Lowe 62*5d9d9091SRichard Lowe#endif 63*5d9d9091SRichard Lowe 64*5d9d9091SRichard Lowe#if defined(__lint) 65*5d9d9091SRichard Lowe/*ARGSUSED*/ 66*5d9d9091SRichard Lowevoid 67*5d9d9091SRichard Lowerdmsr(uint32_t addr, uint64_t *retp) 68*5d9d9091SRichard Lowe{ 69*5d9d9091SRichard Lowe} 70*5d9d9091SRichard Lowe#else 71*5d9d9091SRichard Lowe 72*5d9d9091SRichard Lowe ENTRY(rdmsr) 73*5d9d9091SRichard Lowe movl %edi, %ecx 74*5d9d9091SRichard Lowe rdmsr 75*5d9d9091SRichard Lowe movl %eax, (%rsi) 76*5d9d9091SRichard Lowe movl %edx, 4(%rsi) 77*5d9d9091SRichard Lowe ret 78*5d9d9091SRichard Lowe SET_SIZE(rdmsr) 79*5d9d9091SRichard Lowe 80*5d9d9091SRichard Lowe#endif 81*5d9d9091SRichard Lowe 82*5d9d9091SRichard Lowe#if defined(__lint) 83*5d9d9091SRichard Lowe/*ARGSUSED*/ 84*5d9d9091SRichard Lowevoid 85*5d9d9091SRichard Lowewrmsr(uint32_t addr, uint64_t *valp) 86*5d9d9091SRichard Lowe{ 87*5d9d9091SRichard Lowe} 88*5d9d9091SRichard Lowe#else 89*5d9d9091SRichard Lowe 90*5d9d9091SRichard Lowe ENTRY(wrmsr) 91*5d9d9091SRichard Lowe movl (%rsi), %eax 92*5d9d9091SRichard Lowe movl 4(%rsi), %edx 93*5d9d9091SRichard Lowe movl %edi, %ecx 94*5d9d9091SRichard Lowe wrmsr 95*5d9d9091SRichard Lowe ret 96*5d9d9091SRichard Lowe SET_SIZE(wrmsr) 97*5d9d9091SRichard Lowe 98*5d9d9091SRichard Lowe#endif 99*5d9d9091SRichard Lowe 100*5d9d9091SRichard Lowe#if defined(__lint) 101*5d9d9091SRichard Loweuintptr_t 102*5d9d9091SRichard Loweget_fp(void) 103*5d9d9091SRichard Lowe{ 104*5d9d9091SRichard Lowe return (0); 105*5d9d9091SRichard Lowe} 106*5d9d9091SRichard Lowe#else 107*5d9d9091SRichard Lowe 108*5d9d9091SRichard Lowe ENTRY(get_fp) 109*5d9d9091SRichard Lowe movq %rbp, %rax 110*5d9d9091SRichard Lowe ret 111*5d9d9091SRichard Lowe SET_SIZE(get_fp) 112*5d9d9091SRichard Lowe 113*5d9d9091SRichard Lowe#endif 114*5d9d9091SRichard Lowe 115*5d9d9091SRichard Lowe#if defined(__lint) 116*5d9d9091SRichard Lowe/*ARGSUSED*/ 117*5d9d9091SRichard Lowevoid 118*5d9d9091SRichard Lowekmt_in(void *buf, size_t nbytes, uintptr_t addr) 119*5d9d9091SRichard Lowe{ 120*5d9d9091SRichard Lowe} 121*5d9d9091SRichard Lowe 122*5d9d9091SRichard Lowe/*ARGSUSED*/ 123*5d9d9091SRichard Lowevoid 124*5d9d9091SRichard Lowekmt_out(void *buf, size_t nbytes, uintptr_t addr) 125*5d9d9091SRichard Lowe{ 126*5d9d9091SRichard Lowe} 127*5d9d9091SRichard Lowe#else 128*5d9d9091SRichard Lowe 129*5d9d9091SRichard Lowe ENTRY_NP(kmt_in) 130*5d9d9091SRichard Lowe cmpq $4, %rsi 131*5d9d9091SRichard Lowe je 4f 132*5d9d9091SRichard Lowe cmpq $2, %rsi 133*5d9d9091SRichard Lowe je 2f 134*5d9d9091SRichard Lowe 135*5d9d9091SRichard Lowe1: inb (%dx) 136*5d9d9091SRichard Lowe movb %al, 0(%rdi) 137*5d9d9091SRichard Lowe ret 138*5d9d9091SRichard Lowe 139*5d9d9091SRichard Lowe2: inw (%dx) 140*5d9d9091SRichard Lowe movw %ax, 0(%rdi) 141*5d9d9091SRichard Lowe ret 142*5d9d9091SRichard Lowe 143*5d9d9091SRichard Lowe4: inl (%dx) 144*5d9d9091SRichard Lowe movl %eax, 0(%rdi) 145*5d9d9091SRichard Lowe ret 146*5d9d9091SRichard Lowe SET_SIZE(kmt_in) 147*5d9d9091SRichard Lowe 148*5d9d9091SRichard Lowe ENTRY_NP(kmt_out) 149*5d9d9091SRichard Lowe cmpq $4, %rsi 150*5d9d9091SRichard Lowe je 4f 151*5d9d9091SRichard Lowe cmpq $2, %rsi 152*5d9d9091SRichard Lowe je 2f 153*5d9d9091SRichard Lowe 154*5d9d9091SRichard Lowe1: movb 0(%rdi), %al 155*5d9d9091SRichard Lowe outb (%dx) 156*5d9d9091SRichard Lowe ret 157*5d9d9091SRichard Lowe 158*5d9d9091SRichard Lowe2: movw 0(%rdi), %ax 159*5d9d9091SRichard Lowe outw (%dx) 160*5d9d9091SRichard Lowe ret 161*5d9d9091SRichard Lowe 162*5d9d9091SRichard Lowe4: movl 0(%rdi), %eax 163*5d9d9091SRichard Lowe outl (%dx) 164*5d9d9091SRichard Lowe ret 165*5d9d9091SRichard Lowe SET_SIZE(kmt_out) 166*5d9d9091SRichard Lowe 167*5d9d9091SRichard Lowe#endif 168