1# Copyright (c) 2007 The Hewlett-Packard Development Company 2# All rights reserved. 3# 4# Redistribution and use of this software in source and binary forms, 5# with or without modification, are permitted provided that the 6# following conditions are met: 7# 8# The software must be used only for Non-Commercial Use which means any --- 39 unchanged lines hidden (view full) --- 48# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 49# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 50# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 51# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 52# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 53# 54# Authors: Gabe Black 55 |
56microcode = ''' 57def macroop INS_M_R { 58 # Find the constant we need to either add or subtract from rdi 59 ruflag t0, 10 60 movi t3, t3, dsz, flags=(CEZF,), dataSize=asz 61 subi t4, t0, dsz, dataSize=asz 62 mov t3, t3, t4, flags=(nCEZF,), dataSize=asz 63 64 limm t1, "IntAddrPrefixIO" 65 zext t2, reg, 16, dataSize=2 66 67 ld t6, intseg, [1, t1, t2], addressSize=8 68 st t6, es, [1, t0, rdi] 69 70 add rdi, rdi, t3, dataSize=asz 71}; 72 73def macroop INS_E_M_R { 74 # Find the constant we need to either add or subtract from rdi 75 ruflag t0, 10 76 movi t3, t3, dsz, flags=(CEZF,), dataSize=asz 77 subi t4, t0, dsz, dataSize=asz 78 mov t3, t3, t4, flags=(nCEZF,), dataSize=asz 79 80 limm t1, "IntAddrPrefixIO" 81 zext t2, reg, 16, dataSize=2 82 83topOfLoop: 84 ld t6, intseg, [1, t1, t2], addressSize=8 85 st t6, es, [1, t0, rdi] 86 87 subi rcx, rcx, 1, flags=(EZF,), dataSize=asz 88 add rdi, rdi, t3, dataSize=asz 89 bri t0, label("topOfLoop"), flags=(nCEZF,) 90 fault "NoFault" 91}; 92 93def macroop OUTS_R_M { 94 # Find the constant we need to either add or subtract from rdi 95 ruflag t0, 10 96 movi t3, t3, dsz, flags=(CEZF,), dataSize=asz 97 subi t4, t0, dsz, dataSize=asz 98 mov t3, t3, t4, flags=(nCEZF,), dataSize=asz 99 100 limm t1, "IntAddrPrefixIO" 101 zext t2, reg, 16, dataSize=2 102 103 ld t6, ds, [1, t0, rsi] 104 st t6, intseg, [1, t1, t2], addressSize=8 105 106 add rsi, rsi, t3, dataSize=asz 107}; 108 109def macroop OUTS_E_R_M { 110 # Find the constant we need to either add or subtract from rdi 111 ruflag t0, 10 112 movi t3, t3, dsz, flags=(CEZF,), dataSize=asz 113 subi t4, t0, dsz, dataSize=asz 114 mov t3, t3, t4, flags=(nCEZF,), dataSize=asz 115 116 limm t1, "IntAddrPrefixIO" 117 zext t2, reg, 16, dataSize=2 118 119topOfLoop: 120 ld t6, ds, [1, t0, rsi] 121 st t6, intseg, [1, t1, t2], addressSize=8 122 123 subi rcx, rcx, 1, flags=(EZF,), dataSize=asz 124 add rsi, rsi, t3, dataSize=asz 125 bri t0, label("topOfLoop"), flags=(nCEZF,) 126 fault "NoFault" 127}; 128''' |