From f5d25606562813148639a6faf0742fe6b84fd59d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20M=C3=B6bius?= Date: Fri, 23 Oct 2015 10:25:47 +0200 Subject: [PATCH] More efficient implementation of opposite_halfedge handle Old code compiled to 0x00000000004594a0 <+0>: lea -0x1(%rsi),%edx 0x00000000004594a3 <+3>: lea 0x1(%rsi),%eax 0x00000000004594a6 <+6>: and $0x1,%esi 0x00000000004594a9 <+9>: cmovne %edx,%eax 0x00000000004594ac <+12>: retq New code creates 0x00000000004594a0 <+0>: mov %esi,%eax 0x00000000004594a2 <+2>: xor $0x1,%eax 0x00000000004594a5 <+5>: retq So no conditionals, jumps and fewer instructions closes #5 --- src/OpenMesh/Core/Mesh/ArrayKernel.hh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenMesh/Core/Mesh/ArrayKernel.hh b/src/OpenMesh/Core/Mesh/ArrayKernel.hh index 51397f48..b83f3a6d 100644 --- a/src/OpenMesh/Core/Mesh/ArrayKernel.hh +++ b/src/OpenMesh/Core/Mesh/ArrayKernel.hh @@ -425,7 +425,7 @@ public: HalfedgeHandle opposite_halfedge_handle(HalfedgeHandle _heh) const - { return HalfedgeHandle((_heh.idx() & 1) ? _heh.idx()-1 : _heh.idx()+1); } + { return HalfedgeHandle(_heh.idx() ^ 1); } HalfedgeHandle ccw_rotated_halfedge_handle(HalfedgeHandle _heh) const