internal override void WriteBuffer(TargetMemoryAccess target, byte[] data)
{
if (!is_valid)
throw new LocationInvalidException ();
if (HasAddress) {
base.WriteBuffer (target, data);
return;
}
long contents;
if (data.Length > target.TargetMemoryInfo.TargetIntegerSize)
throw new InternalError ();
if (data.Length < target.TargetMemoryInfo.TargetIntegerSize) {
switch (data.Length) {
case 1: contents = data[0]; break;
case 2: contents = BitConverter.ToInt16 (data, 0); break;
case 4: contents = BitConverter.ToInt32 (data, 0); break;
default:
throw new InternalError ();
}
}
else if (target.TargetMemoryInfo.TargetIntegerSize == 4)
contents = BitConverter.ToInt32 (data, 0);
else if (target.TargetMemoryInfo.TargetIntegerSize == 8)
contents = BitConverter.ToInt64 (data, 0);
else
throw new InternalError ();
// If this is a valuetype, the register hold the whole data.
register.WriteRegister (target, contents);
update (target);
}