xchg.py revision 7501
14104Ssaidi@eecs.umich.edu# Copyright (c) 2007 The Hewlett-Packard Development Company
24104Ssaidi@eecs.umich.edu# All rights reserved.
34104Ssaidi@eecs.umich.edu#
44104Ssaidi@eecs.umich.edu# The license below extends only to copyright in the software and shall
54104Ssaidi@eecs.umich.edu# not be construed as granting a license to any other intellectual
64104Ssaidi@eecs.umich.edu# property including but not limited to intellectual property relating
74104Ssaidi@eecs.umich.edu# to a hardware implementation of the functionality of the software
84104Ssaidi@eecs.umich.edu# licensed hereunder.  You may use the software subject to the license
94104Ssaidi@eecs.umich.edu# terms below provided that you ensure that this notice is replicated
104104Ssaidi@eecs.umich.edu# unmodified and in its entirety in all distributions of the software,
114104Ssaidi@eecs.umich.edu# modified or unmodified, in source code or in binary form.
124104Ssaidi@eecs.umich.edu#
134104Ssaidi@eecs.umich.edu# Redistribution and use in source and binary forms, with or without
144104Ssaidi@eecs.umich.edu# modification, are permitted provided that the following conditions are
154104Ssaidi@eecs.umich.edu# met: redistributions of source code must retain the above copyright
164104Ssaidi@eecs.umich.edu# notice, this list of conditions and the following disclaimer;
174104Ssaidi@eecs.umich.edu# redistributions in binary form must reproduce the above copyright
184104Ssaidi@eecs.umich.edu# notice, this list of conditions and the following disclaimer in the
194104Ssaidi@eecs.umich.edu# documentation and/or other materials provided with the distribution;
204104Ssaidi@eecs.umich.edu# neither the name of the copyright holders nor the names of its
214104Ssaidi@eecs.umich.edu# contributors may be used to endorse or promote products derived from
224104Ssaidi@eecs.umich.edu# this software without specific prior written permission.
234104Ssaidi@eecs.umich.edu#
244104Ssaidi@eecs.umich.edu# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
254104Ssaidi@eecs.umich.edu# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
264104Ssaidi@eecs.umich.edu# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
274104Ssaidi@eecs.umich.edu# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
284104Ssaidi@eecs.umich.edu# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
294104Ssaidi@eecs.umich.edu# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
304104Ssaidi@eecs.umich.edu# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
314104Ssaidi@eecs.umich.edu# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
324104Ssaidi@eecs.umich.edu# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
334104Ssaidi@eecs.umich.edu# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
344104Ssaidi@eecs.umich.edu# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
354104Ssaidi@eecs.umich.edu#
364104Ssaidi@eecs.umich.edu# Authors: Gabe Black
374104Ssaidi@eecs.umich.edu
384104Ssaidi@eecs.umich.edumicrocode = '''
394104Ssaidi@eecs.umich.edu
404104Ssaidi@eecs.umich.edu# All the memory versions need to use LOCK, regardless of if it was set
414194Ssaidi@eecs.umich.edu
424104Ssaidi@eecs.umich.edudef macroop XCHG_R_R
434104Ssaidi@eecs.umich.edu{
444104Ssaidi@eecs.umich.edu    # Use the xor trick instead of moves to reduce register pressure.
454104Ssaidi@eecs.umich.edu    # This probably doesn't make much of a difference, but it's easy.
464104Ssaidi@eecs.umich.edu    xor reg, reg, regm
474104Ssaidi@eecs.umich.edu    xor regm, regm, reg
484104Ssaidi@eecs.umich.edu    xor reg, reg, regm
494194Ssaidi@eecs.umich.edu};
504104Ssaidi@eecs.umich.edu
514104Ssaidi@eecs.umich.edudef macroop XCHG_R_M
524104Ssaidi@eecs.umich.edu{
534104Ssaidi@eecs.umich.edu    ldstl t1, seg, sib, disp
544104Ssaidi@eecs.umich.edu    stul reg, seg, sib, disp
554104Ssaidi@eecs.umich.edu    mov reg, reg, t1
564104Ssaidi@eecs.umich.edu};
574104Ssaidi@eecs.umich.edu
584104Ssaidi@eecs.umich.edudef macroop XCHG_R_P
594104Ssaidi@eecs.umich.edu{
604104Ssaidi@eecs.umich.edu    rdip t7
614104Ssaidi@eecs.umich.edu    ldstl t1, seg, riprel, disp
624104Ssaidi@eecs.umich.edu    stul reg, seg, riprel, disp
634104Ssaidi@eecs.umich.edu    mov reg, reg, t1
644104Ssaidi@eecs.umich.edu};
654104Ssaidi@eecs.umich.edu
664104Ssaidi@eecs.umich.edudef macroop XCHG_M_R
674104Ssaidi@eecs.umich.edu{
684104Ssaidi@eecs.umich.edu    ldstl t1, seg, sib, disp
694104Ssaidi@eecs.umich.edu    stul reg, seg, sib, disp
704104Ssaidi@eecs.umich.edu    mov reg, reg, t1
714104Ssaidi@eecs.umich.edu};
724104Ssaidi@eecs.umich.edu
734104Ssaidi@eecs.umich.edudef macroop XCHG_P_R
744104Ssaidi@eecs.umich.edu{
754104Ssaidi@eecs.umich.edu    rdip t7
764104Ssaidi@eecs.umich.edu    ldstl t1, seg, riprel, disp
774104Ssaidi@eecs.umich.edu    stul reg, seg, riprel, disp
784104Ssaidi@eecs.umich.edu    mov reg, reg, t1
794104Ssaidi@eecs.umich.edu};
804104Ssaidi@eecs.umich.edu
814104Ssaidi@eecs.umich.edudef macroop XCHG_LOCKED_M_R
824104Ssaidi@eecs.umich.edu{
834870Sstever@eecs.umich.edu    ldstl t1, seg, sib, disp
844104Ssaidi@eecs.umich.edu    stul reg, seg, sib, disp
854104Ssaidi@eecs.umich.edu    mov reg, reg, t1
864104Ssaidi@eecs.umich.edu};
874104Ssaidi@eecs.umich.edu
884104Ssaidi@eecs.umich.edudef macroop XCHG_LOCKED_P_R
894104Ssaidi@eecs.umich.edu{
904104Ssaidi@eecs.umich.edu    rdip t7
914104Ssaidi@eecs.umich.edu    ldstl t1, seg, riprel, disp
924104Ssaidi@eecs.umich.edu    stul reg, seg, riprel, disp
934104Ssaidi@eecs.umich.edu    mov reg, reg, t1
944104Ssaidi@eecs.umich.edu};
954104Ssaidi@eecs.umich.edu'''
964104Ssaidi@eecs.umich.edu