簡體   English   中英

用於上下文切換的gcc內聯匯編

[英]gcc inline assembly for context-switching

我正在嘗試使用gcc為m68k處理器實現上下文切換。 我需要使用內聯匯編來保存所有寄存器d0,d1 ... d7和a0,... a7。 我想知道我是否可以在我的內聯gcc中使用一個循環來允許我保存這些寄存器,而不是為每個寄存器寫一個單獨的代碼行。

例如。

move.l%d0,temp pcb.cpuregs.d0 = temp

我想在d0中使0像循環計數器一樣。

干得好:

MOVEM.L D0-D7/A0-A7,-(A7) ;Save registers onto stack.

您不必使用堆棧,您可以使用其他一些地址。
我覺得預減量模式是強制性的,
但我現在無法測試,因為我沒有68k的機器。

ps那可能不是gcc方言,因為當gcc不存在時
我寫了那段代碼,但我相信你可以搞清楚。

pps為什么不使用setjmp而不是內聯匯編?
然后您的上下文切換器將是半便攜式的。

您可能需要考慮宏:

#define SAVE_REG_DXX(no)  __asm__ __volatile__("move.l %%d" #no ", %0" : "=g" (pcb.cpuregs.d ## no))

SAVE_REG_DXX(0);
SAVE_REG_DXX(1);
SAVE_REG_DXX(2);

#undef SAVE_REG_DXX

你不能在asm塊中使用C style for循環。 但是你可以使用你的C代碼來構建一個字符串並將其傳遞給asm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM