Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove class Wide #1731

Merged
merged 1 commit into from
Feb 24, 2018
Merged

Remove class Wide #1731

merged 1 commit into from
Feb 24, 2018

Conversation

pleroy
Copy link
Member

@pleroy pleroy commented Feb 24, 2018

It didn't give us the speed-up that we were hoping for, and it was making the code a bit clunky. If someone wants to resurrect it, the full implementation is in pleroy/WideOp2.

@eggrobin eggrobin added the LGTM label Feb 24, 2018
@pleroy pleroy merged commit d5fee52 into mockingbirdnest:master Feb 24, 2018
@eggrobin
Copy link
Member

eggrobin commented May 30, 2021

It didn't give us the speed-up that we were hoping for

Three years late to this analysis, but inspecting the generated code for the operator() on a vector-valued polynomial of degree 16 for both schemes (from benchmark/polynomial.cpp) provides some explanation for why that is the case: we have five unpcklpd for Estrin and one for Horner (whereas there are obviously 16 mulpd in either case), so it seems that the compiler is smart enough to eliminate the common unpcklpd (and thus the only extra unpcklpd left come from the fact that we unpcklpd after raising the powers with mulsd rather than mulpd in Estrin evaluation).

??R?$PolynomialInMonomialBasis@V?$Multivector@V?$Quantity@U?$Dimensions@$00$0A@$0A@$0A@$0A@$0A@$0A@$0A@@internal_dimensions@quantities@principia@@@internal_quantities@quantities@principia@@U?$Frame@W4Frame_SolarSystemTag@serialization@principia@@$0A@$00$01@internal_frame@geometry@4@$00@internal_grassmann@geometry@principia@@V?$Quantity@U?$Dimensions@$0A@$0A@$00$0A@$0A@$0A@$0A@$0A@@internal_dimensions@quantities@principia@@@internal_quantities@quantities@4@$0BA@UEstrinEvaluator@internal_polynomial_evaluators@numerics@4@@internal_polynomial@numerics@principia@@UEBA?AV?$Multivector@V?$Quantity@U?$Dimensions@$00$0A@$0A@$0A@$0A@$0A@$0A@$0A@@internal_dimensions@quantities@principia@@@internal_quantities@quantities@principia@@U?$Frame@W4Frame_SolarSystemTag@serialization@principia@@$0A@$00$01@internal_frame@geometry@4@$00@internal_grassmann@geometry@3@AEBV?$Quantity@U?$Dimensions@$0A@$0A@$00$0A@$0A@$0A@$0A@$0A@@internal_dimensions@quantities@principia@@@internal_quantities@quantities@3@@Z PROC ; principia::numerics::internal_polynomial::PolynomialInMonomialBasis<principia::geometry::internal_grassmann::Multivector<principia::quantities::internal_quantities::Quantity<principia::quantities::internal_dimensions::Dimensions<1,0,0,0,0,0,0,0> >,principia::geometry::internal_frame::Frame<enum principia::serialization::Frame_SolarSystemTag,0,1,2>,1>,principia::quantities::internal_quantities::Quantity<principia::quantities::internal_dimensions::Dimensions<0,0,1,0,0,0,0,0> >,16,principia::numerics::internal_polynomial_evaluators::EstrinEvaluator>::operator(), COMDAT

; 424  : operator()(Argument const& argument) const {

$LN415:
	sub	rsp, 104				; 00000068H
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\quantities_body.hpp

; 71   :   return Quantity(magnitude_ - right.magnitude_);

	movsd	xmm1, QWORD PTR [r8]
	subsd	xmm1, QWORD PTR [rcx+560]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movups	xmm0, XMMWORD PTR [rcx+512]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_evaluators_body.hpp

; 180  :   return std::get<low>(coefficients);

	movups	xmm5, XMMWORD PTR [rcx+32]
	movaps	XMMWORD PTR [rsp+80], xmm6
	movaps	XMMWORD PTR [rsp+64], xmm7
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	movups	xmm7, XMMWORD PTR [rcx+544]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_body.hpp

; 425  :   return Evaluator<Value, Difference<Argument>, degree_>::Evaluate(

	movaps	xmm2, xmm1
	mulsd	xmm2, xmm1
	movaps	XMMWORD PTR [rsp+48], xmm8
	movaps	XMMWORD PTR [rsp+32], xmm9
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\wide_body.hpp

; 12   :   return _mm_set1_pd(x.magnitude_);

	movaps	xmm9, xmm1
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movups	xmm1, XMMWORD PTR [rcx+448]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_evaluators_body.hpp

; 44   :       SquareGenerator<Argument, n - 1>::Evaluate(argument);

	movaps	xmm3, xmm2
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\wide_body.hpp

; 12   :   return _mm_set1_pd(x.magnitude_);

	unpcklpd xmm9, xmm9
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm9
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\wide_body.hpp

; 12   :   return _mm_set1_pd(x.magnitude_);

	movaps	xmm8, xmm2
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_evaluators_body.hpp

; 44   :       SquareGenerator<Argument, n - 1>::Evaluate(argument);

	mulsd	xmm3, xmm2
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	movups	xmm2, XMMWORD PTR [rcx+416]
	addsd	xmm7, xmm0

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm1, xmm9

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	movups	xmm0, XMMWORD PTR [rcx+480]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_evaluators_body.hpp

; 44   :       SquareGenerator<Argument, n - 1>::Evaluate(argument);

	movaps	xmm4, xmm3
	movaps	XMMWORD PTR [rsp+16], xmm10
	movaps	XMMWORD PTR [rsp], xmm11
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\wide_body.hpp

; 12   :   return _mm_set1_pd(x.magnitude_);

	movaps	xmm6, xmm3
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm0, xmm1
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_evaluators_body.hpp

; 44   :       SquareGenerator<Argument, n - 1>::Evaluate(argument);

	mulsd	xmm4, xmm3
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movups	xmm1, XMMWORD PTR [rcx+320]

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	movups	xmm3, XMMWORD PTR [rcx+288]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_evaluators_body.hpp

; 180  :   return std::get<low>(coefficients);

	movups	xmm11, XMMWORD PTR [rcx+16]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\wide_body.hpp

; 12   :   return _mm_set1_pd(x.magnitude_);

	unpcklpd xmm8, xmm8
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_evaluators_body.hpp

; 44   :       SquareGenerator<Argument, n - 1>::Evaluate(argument);

	movaps	xmm10, xmm4
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm8
	mulsd	xmm1, xmm9
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\wide_body.hpp

; 12   :   return _mm_set1_pd(x.magnitude_);

	unpcklpd xmm6, xmm6
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm7, xmm0
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_evaluators_body.hpp

; 44   :       SquareGenerator<Argument, n - 1>::Evaluate(argument);

	mulsd	xmm10, xmm4
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movups	xmm0, XMMWORD PTR [rcx+384]
	mulsd	xmm0, xmm9
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\wide_body.hpp

; 12   :   return _mm_set1_pd(x.magnitude_);

	unpcklpd xmm4, xmm4
	unpcklpd xmm10, xmm10
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm5, xmm10

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm2, xmm0
	movups	xmm0, XMMWORD PTR [rcx+352]
	addsd	xmm0, xmm1

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movups	xmm1, XMMWORD PTR [rcx+192]
	mulsd	xmm1, xmm9
	mulsd	xmm0, xmm8

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm2, xmm0

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movups	xmm0, XMMWORD PTR [rcx+256]
	mulsd	xmm0, xmm9
	mulsd	xmm2, xmm6

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm3, xmm0
	movups	xmm0, XMMWORD PTR [rcx+224]
	addsd	xmm0, xmm1

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movups	xmm1, XMMWORD PTR [rcx+64]
	mulsd	xmm1, xmm9

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm7, xmm2
	movups	xmm2, XMMWORD PTR [rcx+160]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm8

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm3, xmm0

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movups	xmm0, XMMWORD PTR [rcx+128]
	mulsd	xmm0, xmm9

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm2, xmm0
	movups	xmm0, XMMWORD PTR [rcx+96]
	addsd	xmm0, xmm1

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm8

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm2, xmm0

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movaps	xmm0, xmm9
	mulpd	xmm0, XMMWORD PTR [rcx+112]
	mulsd	xmm2, xmm6

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm0, XMMWORD PTR [rcx+144]
	addsd	xmm3, xmm2

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movaps	xmm2, xmm9
	mulpd	xmm2, XMMWORD PTR [rcx+48]
	mulsd	xmm3, xmm4

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm2, XMMWORD PTR [rcx+80]
	addsd	xmm7, xmm3

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm2, xmm8

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm7, xmm5
	addpd	xmm2, xmm0
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_body.hpp

; 425  :   return Evaluator<Value, Difference<Argument>, degree_>::Evaluate(

	mov	rax, rdx
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movaps	xmm1, xmm9
	movaps	xmm0, xmm9
	mulpd	xmm1, XMMWORD PTR [rcx+176]
	mulpd	xmm0, XMMWORD PTR [rcx+240]

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+208]
	addpd	xmm0, XMMWORD PTR [rcx+272]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm8
	mulpd	xmm2, xmm6

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, xmm0

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movaps	xmm0, xmm9
	mulpd	xmm0, XMMWORD PTR [rcx+368]

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm2, xmm1
	addpd	xmm0, XMMWORD PTR [rcx+400]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movaps	xmm1, xmm9
	mulpd	xmm1, XMMWORD PTR [rcx+304]
	mulpd	xmm11, xmm10

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+336]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm2, xmm4
	mulpd	xmm1, xmm8

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, xmm0

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movaps	xmm0, xmm9
	mulpd	xmm0, XMMWORD PTR [rcx+432]
	mulpd	xmm9, XMMWORD PTR [rcx+496]

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm0, XMMWORD PTR [rcx+464]
	addpd	xmm9, XMMWORD PTR [rcx+528]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm0, xmm8
	mulpd	xmm1, xmm6

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm0, xmm9
	addpd	xmm1, xmm0
	addpd	xmm2, xmm1
	addpd	xmm2, xmm11
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\grassmann_body.hpp

; 21   :     : coordinates_(coordinates) {}

	movups	XMMWORD PTR [rdx], xmm2
	movups	XMMWORD PTR [rdx+16], xmm7
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_body.hpp

; 427  : }

	movaps	xmm6, XMMWORD PTR [rsp+80]
	movaps	xmm7, XMMWORD PTR [rsp+64]
	movaps	xmm8, XMMWORD PTR [rsp+48]
	movaps	xmm9, XMMWORD PTR [rsp+32]
	movaps	xmm10, XMMWORD PTR [rsp+16]
	movaps	xmm11, XMMWORD PTR [rsp]
	add	rsp, 104				; 00000068H
	ret	0
??R?$PolynomialInMonomialBasis@V?$Multivector@V?$Quantity@U?$Dimensions@$00$0A@$0A@$0A@$0A@$0A@$0A@$0A@@internal_dimensions@quantities@principia@@@internal_quantities@quantities@principia@@U?$Frame@W4Frame_SolarSystemTag@serialization@principia@@$0A@$00$01@internal_frame@geometry@4@$00@internal_grassmann@geometry@principia@@V?$Quantity@U?$Dimensions@$0A@$0A@$00$0A@$0A@$0A@$0A@$0A@@internal_dimensions@quantities@principia@@@internal_quantities@quantities@4@$0BA@UHornerEvaluator@internal_polynomial_evaluators@numerics@4@@internal_polynomial@numerics@principia@@UEBA?AV?$Multivector@V?$Quantity@U?$Dimensions@$00$0A@$0A@$0A@$0A@$0A@$0A@$0A@@internal_dimensions@quantities@principia@@@internal_quantities@quantities@principia@@U?$Frame@W4Frame_SolarSystemTag@serialization@principia@@$0A@$00$01@internal_frame@geometry@4@$00@internal_grassmann@geometry@3@AEBV?$Quantity@U?$Dimensions@$0A@$0A@$00$0A@$0A@$0A@$0A@$0A@@internal_dimensions@quantities@principia@@@internal_quantities@quantities@3@@Z PROC ; principia::numerics::internal_polynomial::PolynomialInMonomialBasis<principia::geometry::internal_grassmann::Multivector<principia::quantities::internal_quantities::Quantity<principia::quantities::internal_dimensions::Dimensions<1,0,0,0,0,0,0,0> >,principia::geometry::internal_frame::Frame<enum principia::serialization::Frame_SolarSystemTag,0,1,2>,1>,principia::quantities::internal_quantities::Quantity<principia::quantities::internal_dimensions::Dimensions<0,0,1,0,0,0,0,0> >,16,principia::numerics::internal_polynomial_evaluators::HornerEvaluator>::operator(), COMDAT
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\quantities_body.hpp

; 71   :   return Quantity(magnitude_ - right.magnitude_);

	movsd	xmm3, QWORD PTR [r8]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_evaluators_body.hpp

; 295  :   return std::get<degree>(coefficients);

	movups	xmm1, XMMWORD PTR [rcx+32]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	movups	xmm0, XMMWORD PTR [rcx+64]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\quantities_body.hpp

; 71   :   return Quantity(magnitude_ - right.magnitude_);

	subsd	xmm3, QWORD PTR [rcx+560]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	movups	xmm2, XMMWORD PTR [rcx+544]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\quantities\wide_body.hpp

; 12   :   return _mm_set1_pd(x.magnitude_);

	unpcklpd xmm3, xmm3
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm0, xmm1
	movups	xmm1, XMMWORD PTR [rcx+96]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm1, xmm0
	movups	xmm0, XMMWORD PTR [rcx+128]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm0, xmm1
	movups	xmm1, XMMWORD PTR [rcx+160]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm1, xmm0
	movups	xmm0, XMMWORD PTR [rcx+192]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm0, xmm1
	movups	xmm1, XMMWORD PTR [rcx+224]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm1, xmm0
	movups	xmm0, XMMWORD PTR [rcx+256]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm0, xmm1
	movups	xmm1, XMMWORD PTR [rcx+288]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm1, xmm0
	movups	xmm0, XMMWORD PTR [rcx+320]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm0, xmm1
	movups	xmm1, XMMWORD PTR [rcx+352]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm1, xmm0
	movups	xmm0, XMMWORD PTR [rcx+384]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm0, xmm1
	movups	xmm1, XMMWORD PTR [rcx+416]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm1, xmm0
	movups	xmm0, XMMWORD PTR [rcx+448]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm0, xmm1
	movups	xmm1, XMMWORD PTR [rcx+480]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm0, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm1, xmm0
	movups	xmm0, XMMWORD PTR [rcx+512]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulsd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addsd	xmm0, xmm1

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	movaps	xmm1, xmm3
	mulpd	xmm1, XMMWORD PTR [rcx+16]
	mulsd	xmm0, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+48]
	addsd	xmm2, xmm0

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+80]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+112]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+144]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+176]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+208]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+240]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+272]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+304]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+336]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+368]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+400]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+432]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+464]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_body.hpp

; 425  :   return Evaluator<Value, Difference<Argument>, degree_>::Evaluate(

	mov	rax, rdx
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\r3_element_body.hpp

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+496]

; 257  :   return R3Element<Product<LScalar, RScalar>>(_mm_mul_pd(right.xy, left_128d),

	mulpd	xmm1, xmm3

; 229  :   return R3Element<Scalar>(_mm_add_pd(left.xy, right.xy),

	addpd	xmm1, XMMWORD PTR [rcx+528]
; File C:\Users\robin\Projects\mockingbirdnest\Principia\geometry\grassmann_body.hpp

; 21   :     : coordinates_(coordinates) {}

	movups	XMMWORD PTR [rdx], xmm1
	movups	XMMWORD PTR [rdx+16], xmm2
; File C:\Users\robin\Projects\mockingbirdnest\Principia\numerics\polynomial_body.hpp

; 427  : }

	ret	0

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants