semaphores.py (6486:33faa9915d16) | semaphores.py (6512:b19a86a6d424) |
---|---|
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 --- 84 unchanged lines hidden (view full) --- 93 ldstl t1, seg, riprel, disp 94 sub t0, rax, t1, flags=(OF, SF, ZF, AF, PF, CF) 95 96 mov t1, t1, reg, flags=(CZF,) 97 stul t1, seg, riprel, disp 98 mov rax, rax, t1, flags=(nCZF,) 99}; 100 | 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 --- 84 unchanged lines hidden (view full) --- 93 ldstl t1, seg, riprel, disp 94 sub t0, rax, t1, flags=(OF, SF, ZF, AF, PF, CF) 95 96 mov t1, t1, reg, flags=(CZF,) 97 stul t1, seg, riprel, disp 98 mov rax, rax, t1, flags=(nCZF,) 99}; 100 |
101def macroop CMPXCHG8B_M { 102 lea t1, seg, sib, disp, dataSize=asz 103 ldst t2, seg, [1, t0, t1], 0 104 ldst t3, seg, [1, t0, t1], dsz 105 106 sub t0, rax, t2, flags=(ZF,) 107 br label("doneComparing"), flags=(nCZF,) 108 sub t0, rdx, t3, flags=(ZF,) 109doneComparing: 110 111 # If they're equal, set t3:t2 to rbx:rcx to write to memory 112 mov t2, t2, rbx, flags=(CZF,) 113 mov t3, t3, rcx, flags=(CZF,) 114 115 # If they're not equal, set rdx:rax to the value from memory. 116 mov rax, rax, t2, flags=(nCZF,) 117 mov rdx, rdx, t3, flags=(nCZF,) 118 119 # Write to memory 120 st t3, seg, [1, t0, t1], dsz 121 st t2, seg, [1, t0, t1], 0 122}; 123 124def macroop CMPXCHG8B_P { 125 rdip t7 126 lea t1, seg, riprel, disp, dataSize=asz 127 ldst t2, seg, [1, t0, t1], 0 128 ldst t3, seg, [1, t0, t1], dsz 129 130 sub t0, rax, t2, flags=(ZF,) 131 br label("doneComparing"), flags=(nCZF,) 132 sub t0, rdx, t3, flags=(ZF,) 133doneComparing: 134 135 # If they're equal, set t3:t2 to rbx:rcx to write to memory 136 mov t2, t2, rbx, flags=(CZF,) 137 mov t3, t3, rcx, flags=(CZF,) 138 139 # If they're not equal, set rdx:rax to the value from memory. 140 mov rax, rax, t2, flags=(nCZF,) 141 mov rdx, rdx, t3, flags=(nCZF,) 142 143 # Write to memory 144 st t3, seg, [1, t0, t1], dsz 145 st t2, seg, [1, t0, t1], 0 146}; 147 148def macroop CMPXCHG8B_LOCKED_M { 149 lea t1, seg, sib, disp, dataSize=asz 150 ldstl t2, seg, [1, t0, t1], 0 151 ldstl t3, seg, [1, t0, t1], dsz 152 153 sub t0, rax, t2, flags=(ZF,) 154 br label("doneComparing"), flags=(nCZF,) 155 sub t0, rdx, t3, flags=(ZF,) 156doneComparing: 157 158 # If they're equal, set t3:t2 to rbx:rcx to write to memory 159 mov t2, t2, rbx, flags=(CZF,) 160 mov t3, t3, rcx, flags=(CZF,) 161 162 # If they're not equal, set rdx:rax to the value from memory. 163 mov rax, rax, t2, flags=(nCZF,) 164 mov rdx, rdx, t3, flags=(nCZF,) 165 166 # Write to memory 167 stul t3, seg, [1, t0, t1], dsz 168 stul t2, seg, [1, t0, t1], 0 169}; 170 171def macroop CMPXCHG8B_LOCKED_P { 172 rdip t7 173 lea t1, seg, riprel, disp, dataSize=asz 174 ldstl t2, seg, [1, t0, t1], 0 175 ldstl t3, seg, [1, t0, t1], dsz 176 177 sub t0, rax, t2, flags=(ZF,) 178 br label("doneComparing"), flags=(nCZF,) 179 sub t0, rdx, t3, flags=(ZF,) 180doneComparing: 181 182 # If they're equal, set t3:t2 to rbx:rcx to write to memory 183 mov t2, t2, rbx, flags=(CZF,) 184 mov t3, t3, rcx, flags=(CZF,) 185 186 # If they're not equal, set rdx:rax to the value from memory. 187 mov rax, rax, t2, flags=(nCZF,) 188 mov rdx, rdx, t3, flags=(nCZF,) 189 190 # Write to memory 191 stul t3, seg, [1, t0, t1], dsz 192 stul t2, seg, [1, t0, t1], 0 193}; 194 | |
195def macroop XADD_M_R { 196 ldst t1, seg, sib, disp 197 add t2, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 198 st t2, seg, sib, disp 199 mov reg, reg, t1 200}; 201 202def macroop XADD_P_R { --- 21 unchanged lines hidden (view full) --- 224 225def macroop XADD_R_R { 226 add t2, regm, reg, flags=(OF,SF,ZF,AF,PF,CF) 227 mov regm, regm, reg 228 mov reg, reg, t2 229}; 230 231''' | 101def macroop XADD_M_R { 102 ldst t1, seg, sib, disp 103 add t2, t1, reg, flags=(OF,SF,ZF,AF,PF,CF) 104 st t2, seg, sib, disp 105 mov reg, reg, t1 106}; 107 108def macroop XADD_P_R { --- 21 unchanged lines hidden (view full) --- 130 131def macroop XADD_R_R { 132 add t2, regm, reg, flags=(OF,SF,ZF,AF,PF,CF) 133 mov regm, regm, reg 134 mov reg, reg, t2 135}; 136 137''' |
138 139cmpxchg8bCode = ''' 140def macroop CMPXCHG8B_%(suffix)s { 141 %(rdip)s 142 lea t1, seg, %(sib)s, disp, dataSize=asz 143 ldst%(l)s t2, seg, [1, t0, t1], 0 144 ldst%(l)s t3, seg, [1, t0, t1], dsz 145 146 sub t0, rax, t2, flags=(ZF,) 147 br label("doneComparing"), flags=(nCZF,) 148 sub t0, rdx, t3, flags=(ZF,) 149doneComparing: 150 151 # If they're equal, set t3:t2 to rbx:rcx to write to memory 152 mov t2, t2, rbx, flags=(CZF,) 153 mov t3, t3, rcx, flags=(CZF,) 154 155 # If they're not equal, set rdx:rax to the value from memory. 156 mov rax, rax, t2, flags=(nCZF,) 157 mov rdx, rdx, t3, flags=(nCZF,) 158 159 # Write to memory 160 st%(ul)s t3, seg, [1, t0, t1], dsz 161 st%(ul)s t2, seg, [1, t0, t1], 0 162}; 163''' 164 165microcode += cmpxchg8bCode % {"rdip": "", "sib": "sib", 166 "l": "", "ul": "", 167 "suffix": "M"} 168microcode += cmpxchg8bCode % {"rdip": "rdip t7", "sib": "riprel", 169 "l": "", "ul": "", 170 "suffix": "P"} 171microcode += cmpxchg8bCode % {"rdip": "", "sib": "sib", 172 "l": "l", "ul": "ul", 173 "suffix": "LOCKED_M"} 174microcode += cmpxchg8bCode % {"rdip": "rdip t7", "sib": "riprel", 175 "l": "l", "ul": "ul", 176 "suffix": "LOCKED_P"} 177 |
|
232#let {{ 233# class XCHG(Inst): 234# "GenFault ${new UnimpInstFault}" 235#}}; | 178#let {{ 179# class XCHG(Inst): 180# "GenFault ${new UnimpInstFault}" 181#}}; |