RV32A指令集
RV32A指令包括兩類:AMO(atomic memory operation)指令,Load-Reserved/Store-Conditional指令
Category | Fmt | RV32I base | machine code(bin) | comment | AMO(atomic memory-operation指令 | 從地址rs1指定的儲存器中讀出一個數據,存放到rd暫存器中,並且將讀出的資料和rs2暫存器中的值進行計算,再將結果寫回rs1指定的儲存器中。 | R | amoswap.w rd, rs2,(rs1) | 00001[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 | 將讀出的資料與rs2暫存器的值進行互換。 | R | amoadd.w rd, rs2,(rs1) | 00000[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 | 將讀出的資料與rs2暫存器的值進行加法操作。 | R | amoand.w rd, rs2,(rs1) | 01100[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 | 將讀出的資料與rs2暫存器的值進行與運算。 | R | amoor.w rd, rs2,(rs1) | 01000[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 | 將讀出的資料與rs2暫存器的值進行或操作。 | R | amoxor.w, rd, rs2,(rs1) | 00100[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 | 將讀出的資料與rs2暫存器的值進行異或操作。 | R | amomax.w, rd, rs2,(rs1) | 10100[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 | 將讀出的資料與rs2暫存器的值進行(當作有符號數)取最大值操作。 | R | amomaxu.w rd, rs2,(rs1) | 11100[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 | 將讀出的資料與rs2暫存器的值進行(當作無符號數)取最大值操作。 | R | amomin.w rd, rs2,(rs1) | 10000[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 | 將讀出的資料與rs2暫存器的值進行(當作有符號數)取最小值操作。 | R | amominu.w rd, rs2,(rs1) | 11000[26,aq][25,rl]00000[19-15,rs1]010[11-7,rd]0101111 | 將讀出的資料與rs2暫存器的值進行(當作無符號數)取最小值操作。 | Load_Reserved/store-conditional指令 | R | lr.w rd, (rs1) | 00001[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 | 從rs1指定的儲存器地址中讀出一個32位資料,結果放入rd中。 | R | lsc.w rd, rs2,(rs1) | 00010[26,aq][25,rl][20-24,rs2][19-15,rs1]010[11-7,rd]0101111 |
向rs1指定儲存器地址中寫入一個32位資料,資料來自於rs2暫存器。Sc指令不一定能夠執行成功,只有滿足一下條件,才能執行成功。 1.LR和SC指定成對的訪問相同的地址。 2.LR和SC指令之間沒有任何其他的寫操作(來自任何一個hart)訪問過相同的地址。 3.LR和SC指令之間沒有任何中斷與異常發生。 4.LR和SC指令之間沒有任何的MRET指令。 如果執行成功,則向rd暫存器中寫回數值0,如果失敗,則向rd暫存器中寫回一個非0值。如果執行失敗,意味著沒有真正寫入儲存器。 |
計算機體系結構中的儲存器模型(或者說儲存器一致性模型)主要分為三類:按序一致性模型,鬆散一致性模型,釋放一致性模型。
更詳細儲存器一致性介紹請看: ofollow,noindex" target="_blank">https://blog.csdn.net/jfengamarsoft/article/details/70923658?utm_source=blogxgwz2