@@ -57,6 +57,56 @@ impl Cmov for u16 {
5757 }
5858}
5959
60+ impl Cmov for u32 {
61+ #[ inline]
62+ fn cmovnz ( & mut self , value : & Self , condition : Condition ) {
63+ cmov ! ( "cmovnz {1:e}, {2:e}" , self , value, condition) ;
64+ }
65+
66+ #[ inline]
67+ fn cmovz ( & mut self , value : & Self , condition : Condition ) {
68+ cmov ! ( "cmovz {1:e}, {2:e}" , self , value, condition) ;
69+ }
70+ }
71+
72+ #[ cfg( target_arch = "x86" ) ]
73+ impl Cmov for u64 {
74+ #[ inline]
75+ fn cmovnz ( & mut self , value : & Self , condition : Condition ) {
76+ let mut lo = ( * self & u32:: MAX as u64 ) as u32 ;
77+ let mut hi = ( * self >> 32 ) as u32 ;
78+
79+ lo. cmovnz ( & ( ( * value & u32:: MAX as u64 ) as u32 ) , condition) ;
80+ hi. cmovnz ( & ( ( * value >> 32 ) as u32 ) , condition) ;
81+
82+ * self = ( lo as u64 ) | ( hi as u64 ) << 32 ;
83+ }
84+
85+ #[ inline]
86+ fn cmovz ( & mut self , value : & Self , condition : Condition ) {
87+ let mut lo = ( * self & u32:: MAX as u64 ) as u32 ;
88+ let mut hi = ( * self >> 32 ) as u32 ;
89+
90+ lo. cmovz ( & ( ( * value & u32:: MAX as u64 ) as u32 ) , condition) ;
91+ hi. cmovz ( & ( ( * value >> 32 ) as u32 ) , condition) ;
92+
93+ * self = ( lo as u64 ) | ( hi as u64 ) << 32 ;
94+ }
95+ }
96+
97+ #[ cfg( target_arch = "x86_64" ) ]
98+ impl Cmov for u64 {
99+ #[ inline]
100+ fn cmovnz ( & mut self , value : & Self , condition : Condition ) {
101+ cmov ! ( "cmovnz {1:r}, {2:r}" , self , value, condition) ;
102+ }
103+
104+ #[ inline]
105+ fn cmovz ( & mut self , value : & Self , condition : Condition ) {
106+ cmov ! ( "cmovz {1:r}, {2:r}" , self , value, condition) ;
107+ }
108+ }
109+
60110impl CmovEq for u16 {
61111 #[ inline]
62112 fn cmoveq ( & self , rhs : & Self , input : Condition , output : & mut Condition ) {
@@ -83,18 +133,6 @@ impl CmovEq for u16 {
83133 }
84134}
85135
86- impl Cmov for u32 {
87- #[ inline]
88- fn cmovnz ( & mut self , value : & Self , condition : Condition ) {
89- cmov ! ( "cmovnz {1:e}, {2:e}" , self , value, condition) ;
90- }
91-
92- #[ inline]
93- fn cmovz ( & mut self , value : & Self , condition : Condition ) {
94- cmov ! ( "cmovz {1:e}, {2:e}" , self , value, condition) ;
95- }
96- }
97-
98136impl CmovEq for u32 {
99137 #[ inline]
100138 fn cmoveq ( & self , rhs : & Self , input : Condition , output : & mut Condition ) {
@@ -121,31 +159,6 @@ impl CmovEq for u32 {
121159 }
122160}
123161
124- #[ cfg( target_arch = "x86" ) ]
125- impl Cmov for u64 {
126- #[ inline]
127- fn cmovnz ( & mut self , value : & Self , condition : Condition ) {
128- let mut lo = ( * self & u32:: MAX as u64 ) as u32 ;
129- let mut hi = ( * self >> 32 ) as u32 ;
130-
131- lo. cmovnz ( & ( ( * value & u32:: MAX as u64 ) as u32 ) , condition) ;
132- hi. cmovnz ( & ( ( * value >> 32 ) as u32 ) , condition) ;
133-
134- * self = ( lo as u64 ) | ( hi as u64 ) << 32 ;
135- }
136-
137- #[ inline]
138- fn cmovz ( & mut self , value : & Self , condition : Condition ) {
139- let mut lo = ( * self & u32:: MAX as u64 ) as u32 ;
140- let mut hi = ( * self >> 32 ) as u32 ;
141-
142- lo. cmovz ( & ( ( * value & u32:: MAX as u64 ) as u32 ) , condition) ;
143- hi. cmovz ( & ( ( * value >> 32 ) as u32 ) , condition) ;
144-
145- * self = ( lo as u64 ) | ( hi as u64 ) << 32 ;
146- }
147- }
148-
149162#[ cfg( target_arch = "x86" ) ]
150163impl CmovEq for u64 {
151164 #[ inline]
@@ -171,19 +184,6 @@ impl CmovEq for u64 {
171184 }
172185}
173186
174- #[ cfg( target_arch = "x86_64" ) ]
175- impl Cmov for u64 {
176- #[ inline]
177- fn cmovnz ( & mut self , value : & Self , condition : Condition ) {
178- cmov ! ( "cmovnz {1:r}, {2:r}" , self , value, condition) ;
179- }
180-
181- #[ inline]
182- fn cmovz ( & mut self , value : & Self , condition : Condition ) {
183- cmov ! ( "cmovz {1:r}, {2:r}" , self , value, condition) ;
184- }
185- }
186-
187187#[ cfg( target_arch = "x86_64" ) ]
188188impl CmovEq for u64 {
189189 #[ inline]
0 commit comments