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 11.text 12 13/* 14 * Inputs: 15 * %esi : memory location to compare 16 * %eax : low 32 bits of old value 17 * %edx : high 32 bits of old value 18 * %ebx : low 32 bits of new value 19 * %ecx : high 32 bits of new value 20 */ 21ENTRY(cmpxchg8b_emu) 22 23# 24# Emulate 'cmpxchg8b (%esi)' on UP except we don't 25# set the whole ZF thing (caller will just compare 26# eax:edx with the expected value) 27# 28 pushfl 29 cli 30 31 cmpl (%esi), %eax 32 jne .Lnot_same 33 cmpl 4(%esi), %edx 34 jne .Lhalf_same 35 36 movl %ebx, (%esi) 37 movl %ecx, 4(%esi) 38 39 popfl 40 ret 41 42.Lnot_same: 43 movl (%esi), %eax 44.Lhalf_same: 45 movl 4(%esi), %edx 46 47 popfl 48 ret 49 50ENDPROC(cmpxchg8b_emu) 51