using System;
using System.Linq;

using CPU = Indy.IL2CPU.Assembler.X86;
using Indy.IL2CPU.Assembler;

namespace Indy.IL2CPU.IL.X86 {
	[OpCode(OpCodeEnum.Ldc_R8)]
	public class Ldc_R8: Op {
		private readonly Double mValue;
		public Ldc_R8(ILReader aReader, MethodInformation aMethodInfo)
			: base(aReader, aMethodInfo) {
			mValue = aReader.OperandValueDouble;
		}
		public override void DoAssemble() {
			byte[] xBytes = BitConverter.GetBytes(mValue);
			new CPU.Pushd("0x" + xBytes.Take(4).Aggregate("", (s, b) => s + b.ToString("X2")));
			new CPU.Pushd("0x" + xBytes.Skip(4).Aggregate("", (s, b) => s + b.ToString("X2")));
			Assembler.StackContents.Push(new StackContent(8, typeof(Double)));
		}
	}
}