1/* 2 * This program is free software; you can redistribute it and/or 3 * modify it under the terms of the GNU General Public License 4 * as published by the Free Software Foundation; version 2 5 * of the License. 6 * 7 */ 8 9#include <linux/linkage.h> 10#include <asm/dwarf2.h> 11 12.text 13 14/* 15 * Inputs: 16 * %esi : memory location to compare 17 * %eax : low 32 bits of old value 18 * %edx : high 32 bits of old value 19 * %ebx : low 32 bits of new value 20 * %ecx : high 32 bits of new value 21 */ 22ENTRY(cmpxchg8b_emu) 23CFI_STARTPROC 24 25# 26# Emulate 'cmpxchg8b (%esi)' on UP except we don't 27# set the whole ZF thing (caller will just compare 28# eax:edx with the expected value) 29# 30 pushfl_cfi 31 cli 32 33 cmpl (%esi), %eax 34 jne .Lnot_same 35 cmpl 4(%esi), %edx 36 jne .Lhalf_same 37 38 movl %ebx, (%esi) 39 movl %ecx, 4(%esi) 40 41 CFI_REMEMBER_STATE 42 popfl_cfi 43 ret 44 45 CFI_RESTORE_STATE 46.Lnot_same: 47 movl (%esi), %eax 48.Lhalf_same: 49 movl 4(%esi), %edx 50 51 popfl_cfi 52 ret 53 54CFI_ENDPROC 55ENDPROC(cmpxchg8b_emu) 56