24531904_j
24531904_j 24531904_j
cmpxchg ─ 比較交換 (Compare And Exchange) cmpxchg 書式 : (qp) cmpxchgsz.sem.ldhint r 1 = [r 3 ], r 2 , ar.ccv M16 (qp) cmp8xchg16.sem.ldhint r1 = [r 3 ], r 2 , ar.csd, ar.ccv sixteen_byte_form M16 説明 : GR r3 の値で指定されるアドレスから始まるメモリ位置から sz バイ ト (cmp8xchg16 では 8 バイ ト ) の値が読み込 ま れる。 こ の値はゼ ロ拡張 さ れ、 比較交換での比較値 (cmpxchg Compare Value) アプ リ ケーシ ョ ン ・ レジスタの内容 (AR[CCV]) と比較される。 2 つが等 しい場合は、 GR r2 の最下位の sz ビッ トが取り出され、 GR r3 の値で指定されるア ド レ ス から始まるメモリ位置に書き込まれる。 cmp8xchg16 の場合、 2 つが等しい場合は、 ビ ッ ト 3 を無視する指定されたア ド レ ス (GR r3 & ~ 0x4) に GR r2 からの8 バイ ト がス ト アさ れ、 そのア ド レ ス に 8 を加えたア ド レス ((GR r3 & ~ 0x4)+ 8) に Compare and Store Data アプ リ ケーシ ョ ン ・ レジスタ (AR[CSD]) からの8 バイ ト がス ト アされる。 メモリから読 み込まれ、 ゼロ拡張された値は GR r1 に格納され、 GR r1 に対応する NaT ビッ トがクリ アされる。 sz コンプリータの値を表 2-19 に示す。 sem コンプリータでセマフォ操作のタイプを指定 する。 それらの操作の説明を、 表 2-20 に示す。 メモ リ順序の詳細は、 第 2 巻、 第 1 部の 4.4.7 項 「シーケンシャル属性と順序付け」 を参照のこ と。 表 2-19. 比較交換のメモリ・サイズ 表 2-20. 比較交換セマフォのタイプ sem コンプリータ acq 取得 rel 解放 sz コンプリータ アクセスされるバイト数 1 1 2 2 4 4 8 8 順序付けの セマンティックス セマフォ操作 後続のすべてのデータ・メモリ・アクセスの前に、メモリに対する読 み取り / 書き込みが検出可能になる。 先行のすべてのデータ・メモリ・アクセスの後に、メモリに対する読 み取り / 書き込みが検出可能になる。 GR r3 の値で指定されるア ド レ スが、 メモ リ でア クセス されるサイズに自然にアラ イ メ ントされていない場合は、 ユーザ・マスク (User Mask) アライメン ト ・ チェ ッ ク ・ ビッ ト UM.ac ( プロセッサ ・ ステータス ・ レジスタの PSR.ac) の状態に関わらず、 非アラ イ メン ト・データ参照 (Unaligned Data Reference) フォルトが発生する。 cmp8xchg16 命令では、 指定 さ れる ア ド レ ス は 8 バイ ト にアライメン トが合っていなければならない。 メモ リ に対する読み取り およ び書き込みはア ト ミ ッ ク な操作である こ と が保証されてい る。 cmp8xchg16 命令では、 8 バイ ト のメモリ読み取り と 16 バイ ト のメモリ書き込みは ア ト ミ ッ ク な操作であ る こ と が保証 さ れている。 参照 さ れるペー ジ に対する読み取 り お よ び書き込みの両方のア ク セス特権が必要であ る。 メモ リ への書き込みが行われるかど う かに関わらず、 書み込みアク セス特権のチェ ッ ク が行われる。 こ の命令は、 ラ イ ト バ ッ ク書き込みポ リ シ ー を持つキ ャ ッ シ ュ可能ペー ジ に対してのみ 有効であ る。 NaTPage にアクセスする と、 データ NaT ペー ジ参照フ ォ ル ト が発生す る。 他のメモ リ 属性を持つペー ジにアク セスする と、 サポ ー ト されないデー タ参照フ ォ ル ト が発生する。 3:40 第 3 巻 : 命令リファレンス
cmpxchg ldhint コ ンプ リ ー タの値で、 メモ リ ・ ア クセスの局所性を指定する。 ldhint コンプリータ の値の一覧を 3:136 ページの表 2-34 に示してい る。 局所性 ヒ ン ト はプ ロ グ ラ ムの機能に は影響せず、 プログラム ・ コ ー ド では無視も でき る。 詳細は第 1 巻、 第 1 部の 4.4.6 項 「メモ リ 階層の制御 と 整合性」 を参照のこ と。 操作 : if (PR[qp]) { check_target_register(r 1 ); } if (GR[r 3].nat || GR[r 2].nat) register_nat_consumption_fault(SEMAPHORE); if (sixteen_byte_form) sz = 8; paddr = tlb_translate(GR[r 3], sz, SEMAPHORE, PSR.cpl, &mattr, &tmp_unused); if (!ma_supports_semaphores(mattr)) unsupported_data_reference_fault(SEMAPHORE, GR[r 3 ]); if (sixteen_byte_form) { if (sem == ‘acq’) val = mem_xchg16_cond(AR[CCV], GR[r 2], AR[CSD], paddr, UM.be, mattr, ACQUIRE, ldhint); else // ‘rel’ val = mem_xchg16_cond(AR[CCV], GR[r 2], AR[CSD], paddr, UM.be, mattr, RELEASE, ldhint); } else { if (sem == ‘acq’) val = mem_xchg_cond(AR[CCV], GR[r 2 ], paddr, sz, UM.be, mattr, ACQUIRE, ldhint); else // ‘rel’ val = mem_xchg_cond(AR[CCV], GR[r 2 ], paddr, sz, UM.be, mattr, RELEASE, ldhint); val = zero_ext(val, sz * 8); } if (AR[CCV] == val) alat_inval_multiple_entries(paddr, sz); GR[r 1] = val; GR[r 1 ].nat = 0; 割り込み : 無効操作フ ォ ル ト デー タ ・ キ ー ・ ミ ス ・ フ ォ ル ト レジスタ NaT 参照フ ォ ル ト デー タ ・ キ ー許可フ ォ ル ト 実装 さ れていないデ ー タ ・ ア ド レ ス ・ フ ォ ル ト デー タ ・ ア ク セス権フ ォ ル ト データがネス ト された TLB フォルト データ・ダーティ・ビット ・フォルト 別のデー タ TLB フォルト データ・アクセス・ビット ・フォルト VHPT データ ・ フォル ト データ ・ デバッグ ・ フォル ト データ TLB フ ォ ル ト 符号なしデー タ参照フ ォ ル ト データ ・ ページ不在フォルト サポー ト されないデータ参照フォルト データ NaT ページ参照フォル ト 第 3 巻 : 命令リファレンス 3:41
- Seite 1 und 2: インテル ® Itanium ® アー
- Seite 3 und 4: 目次 第 I 部 : インテル ®
- Seite 5: 図 3.2 インテル ® アーキ
- Seite 8 und 9: 2-37 lftype のニーモニック
- Seite 10 und 11: 第 II 部 : IA-32 命令セット
- Seite 13 und 14: 本書について 1 インテル
- Seite 15 und 16: 第 9 章「IA-32 割 り 込みベ
- Seite 17 und 18: 1.4 用語の定義 以下の定義
- Seite 19 und 20: 改訂日付 改訂番号 内容 20
- Seite 21 und 22: 命令リファレンス 2 本章
- Seite 23 und 24: add add ─ 加算 (Add) 書式 : (
- Seite 25 und 26: alloc alloc ─ スタック・フ
- Seite 27 und 28: and and ─ 論理積 (Logical And)
- Seite 29 und 30: br ─ 分岐 (Branch) 書式 : (qp
- Seite 31 und 32: ファイルをフラッシュす
- Seite 33 und 34: 図 2-4. br.wtop および br.wexit
- Seite 35 und 36: CFM.sor = 0; CFM.rrb.gr = 0; CFM.rr
- Seite 37 und 38: eak break ─ ブレーク (Break)
- Seite 39 und 40: l 関係な く 、 無効操作フ
- Seite 41 und 42: p 操作 : tmp_tag = IP + sign_ext(
- Seite 43 und 44: chk chk ─ スペキュレーシ
- Seite 45 und 46: clrrrb clrrrb ─ RRB のクリア
- Seite 47 und 48: cmp る関係を利用する。 一
- Seite 49 und 50: cmp4 cmp4 ─ 4 バイト比較 (Co
- Seite 51: cmp4 PR[p1 ] = 0; PR[p2] = 0; } els
- Seite 55 und 56: czx czx ─ ゼロ・インデッ
- Seite 57 und 58: dep dep ─ デポジット (Deposi
- Seite 59 und 60: epc epc ─ 特権コードへの
- Seite 61 und 62: fabs fabs ─ 浮動小数点絶対
- Seite 63 und 64: famax famax ─ 浮動小数点絶
- Seite 65 und 66: fand fand ─ 浮動小数点論理
- Seite 67 und 68: fc fc ─ キャッシュのフラ
- Seite 69 und 70: fclass fclass ─ 浮動小数点
- Seite 71 und 72: fclrf fclrf ─ 浮動小数点フ
- Seite 73 und 74: fcmp 操作 : if (PR[qp]) { if (p 1
- Seite 75 und 76: fcvt.fx fcvt.fx ─ 浮動小数点
- Seite 77 und 78: fcvt.xf fcvt.xf ─ 符号付き整
- Seite 79 und 80: fetchadd fetchadd ─ 即値のフ
- Seite 81 und 82: flushrs flushrs ─ レジスタ・
- Seite 83 und 84: fmax fmax ─ 浮動小数点最大
- Seite 85 und 86: fmerge 操作 : if (PR[qp]) { fp_ch
- Seite 87 und 88: fmix fmix ─ 浮動小数点ミッ
- Seite 89 und 90: fmpy fmpy ─ 浮動小数点乗算
- Seite 91 und 92: fneg fneg ─ 浮動小数点否定
- Seite 93 und 94: fnma fnma ─ 浮動小数点積和
- Seite 95 und 96: fnorm fnorm ─ 浮動小数点正
- Seite 97 und 98: fpabs fpabs ─ 浮動小数点並
- Seite 99 und 100: fpamax fpamax ─ 浮動小数点
- Seite 101 und 102: fpamin fpamin ─ 浮動小数点
cmpxchg<br />
ldhint コ ンプ リ ー タの値で、 メモ リ ・ ア クセスの局所性を指定する。 ldhint コンプリータ<br />
の値の一覧を 3:136 ページの表 2-34 に示してい る。 局所性 ヒ ン ト はプ ロ グ ラ ムの機能に<br />
は影響せず、 プログラム ・ コ ー ド では無視も でき る。 詳細は第 1 巻、 第 1 部の 4.4.6 項<br />
「メモ リ 階層の制御 と 整合性」 を参照のこ と。<br />
操作 : if (PR[qp]) {<br />
check_target_register(r 1 );<br />
}<br />
if (GR[r 3].nat || GR[r 2].nat)<br />
register_nat_consumption_fault(SEMAPHORE);<br />
if (sixteen_byte_form)<br />
sz = 8;<br />
paddr = tlb_translate(GR[r 3], sz, SEMAPHORE, PSR.cpl, &mattr,<br />
&tmp_unused);<br />
if (!ma_supports_semaphores(mattr))<br />
unsupported_data_reference_fault(SEMAPHORE, GR[r 3 ]);<br />
if (sixteen_byte_form) {<br />
if (sem == ‘acq’)<br />
val = mem_xchg16_cond(AR[CCV], GR[r 2], AR[CSD], paddr, UM.be,<br />
mattr, ACQUIRE, ldhint);<br />
else // ‘rel’<br />
val = mem_xchg16_cond(AR[CCV], GR[r 2], AR[CSD], paddr, UM.be,<br />
mattr, RELEASE, ldhint);<br />
} else {<br />
if (sem == ‘acq’)<br />
val = mem_xchg_cond(AR[CCV], GR[r 2 ], paddr, sz, UM.be, mattr,<br />
ACQUIRE, ldhint);<br />
else // ‘rel’<br />
val = mem_xchg_cond(AR[CCV], GR[r 2 ], paddr, sz, UM.be, mattr,<br />
RELEASE, ldhint);<br />
val = zero_ext(val, sz * 8);<br />
}<br />
if (AR[CCV] == val)<br />
alat_inval_multiple_entries(paddr, sz);<br />
GR[r 1] = val;<br />
GR[r 1 ].nat = 0;<br />
割り込み : 無効操作フ ォ ル ト デー タ ・ キ ー ・ ミ ス ・ フ ォ ル ト<br />
レジスタ NaT 参照フ ォ ル ト デー タ ・ キ ー許可フ ォ ル ト<br />
実装 さ れていないデ ー タ ・ ア ド レ ス ・ フ ォ ル ト デー タ ・ ア ク セス権フ ォ ル ト<br />
データがネス ト された TLB フォルト データ・ダーティ・ビット ・フォルト<br />
別のデー タ TLB フォルト データ・アクセス・ビット ・フォルト<br />
VHPT データ ・ フォル ト データ ・ デバッグ ・ フォル ト<br />
データ TLB フ ォ ル ト 符号なしデー タ参照フ ォ ル ト<br />
データ ・ ページ不在フォルト サポー ト されないデータ参照フォルト<br />
データ NaT ページ参照フォル ト<br />
第 3 巻 : 命令リファレンス 3:41