//MACRO Buffer.copypad ToBuffer, ToLength, FromBuffer, FromLength, PadReg, 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 ld= "L" + abiWID; var st= "S" + abiWID; var wl= abiWLen; var wn= abiWID == "D" ? "double word" : "word"; // // Generate code // \#Label IF ( #ToLength > #FromLength ), THEN // Check if 'to buffer' is larger \ SUB #ToLength, #FromLength // Compute residual length \ ELSE \ MV #FromLength, #ToLength // Set copy target length \ ADDI #ToLength, 0[0] // Zero residual length \ ENDIF \ \ BUFFER.COPY #ToBuffer, #FromBuffer, #FromLength, #WReg // Copy buffer \ \ IF ( #ToLength > 0 ), THEN \ BUFFER.SET #ToBuffer, #ToLength, #PadReg // Pad residual length of buffer \ ENDIF