//MACRO Buffer.ldpadreg PadReg, Char, {optional}, WReg //-------------------------------------------------------------------------------------------------- // // @ CopyRight Roberti & Parau Enterprises, Inc. 2021-2023 // // This work is licensed under the Creative Commons Attribution-NoDerivatives 4.0 International License. // To view a copy of this license, visit http://creativecommons.org/licenses/by-nd/4.0/ // or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA. // //-------------------------------------------------------------------------------------------------- // // // Set up variables // eval(DVASM.getEnv()[4]); var wl= abiWLen; var wn= abiWID == "D" ? "double word" : "word"; if (wl == 8 && WReg === null) return DVASM.putError("Optional working register must be specified when using 64 bits registers"); else if (wl == 4 && WReg !== null) DVASM.putWarning("Optional working register specified but not used when using 32 bits registers"); // // Prepare variables // Char= "(" + Char + ")"; var val32= "(" + Char + " << 24) | (" + Char + " << 16) | (" + Char + " << 8) | " + Char; var val20= "((" + val32 + " + 0x1000) & 0xFFFFF000)"; var val12= "(" + val32 + " + 0x800) - " + val20; // // Generate code // \#Label LUI #PadReg, #val20 // Load 20 high bits of quad char value \ ADDI #PadReg, #val12 // Add low 20 bits of quad char value if (wl == 8) { \ SLLI #WReg, 32[#PadReg] // Shift left to prepare for OR \ OR #PadReg, #WReg // OR it to create eight char }