@@ -289,103 +289,103 @@ impl Cond {
289289 ///
290290 /// Note that the offset encoded to jump by is filled in as 0 and it's
291291 /// assumed `MachBuffer` will come back and clean it up.
292- pub fn encode ( & self , sink : & mut impl Extend < u8 > ) {
292+ pub fn encode ( & self , sink : & mut impl Extend < u8 > , rel : i32 ) {
293293 match * self {
294- Cond :: If32 { reg } => encode:: br_if32 ( sink, reg, 0 ) ,
295- Cond :: IfNot32 { reg } => encode:: br_if_not32 ( sink, reg, 0 ) ,
296- Cond :: IfXeq32 { src1, src2 } => encode:: br_if_xeq32 ( sink, src1, src2, 0 ) ,
297- Cond :: IfXneq32 { src1, src2 } => encode:: br_if_xneq32 ( sink, src1, src2, 0 ) ,
298- Cond :: IfXslt32 { src1, src2 } => encode:: br_if_xslt32 ( sink, src1, src2, 0 ) ,
299- Cond :: IfXslteq32 { src1, src2 } => encode:: br_if_xslteq32 ( sink, src1, src2, 0 ) ,
300- Cond :: IfXult32 { src1, src2 } => encode:: br_if_xult32 ( sink, src1, src2, 0 ) ,
301- Cond :: IfXulteq32 { src1, src2 } => encode:: br_if_xulteq32 ( sink, src1, src2, 0 ) ,
302- Cond :: IfXeq64 { src1, src2 } => encode:: br_if_xeq64 ( sink, src1, src2, 0 ) ,
303- Cond :: IfXneq64 { src1, src2 } => encode:: br_if_xneq64 ( sink, src1, src2, 0 ) ,
304- Cond :: IfXslt64 { src1, src2 } => encode:: br_if_xslt64 ( sink, src1, src2, 0 ) ,
305- Cond :: IfXslteq64 { src1, src2 } => encode:: br_if_xslteq64 ( sink, src1, src2, 0 ) ,
306- Cond :: IfXult64 { src1, src2 } => encode:: br_if_xult64 ( sink, src1, src2, 0 ) ,
307- Cond :: IfXulteq64 { src1, src2 } => encode:: br_if_xulteq64 ( sink, src1, src2, 0 ) ,
294+ Cond :: If32 { reg } => encode:: br_if32 ( sink, reg, rel ) ,
295+ Cond :: IfNot32 { reg } => encode:: br_if_not32 ( sink, reg, rel ) ,
296+ Cond :: IfXeq32 { src1, src2 } => encode:: br_if_xeq32 ( sink, src1, src2, rel ) ,
297+ Cond :: IfXneq32 { src1, src2 } => encode:: br_if_xneq32 ( sink, src1, src2, rel ) ,
298+ Cond :: IfXslt32 { src1, src2 } => encode:: br_if_xslt32 ( sink, src1, src2, rel ) ,
299+ Cond :: IfXslteq32 { src1, src2 } => encode:: br_if_xslteq32 ( sink, src1, src2, rel ) ,
300+ Cond :: IfXult32 { src1, src2 } => encode:: br_if_xult32 ( sink, src1, src2, rel ) ,
301+ Cond :: IfXulteq32 { src1, src2 } => encode:: br_if_xulteq32 ( sink, src1, src2, rel ) ,
302+ Cond :: IfXeq64 { src1, src2 } => encode:: br_if_xeq64 ( sink, src1, src2, rel ) ,
303+ Cond :: IfXneq64 { src1, src2 } => encode:: br_if_xneq64 ( sink, src1, src2, rel ) ,
304+ Cond :: IfXslt64 { src1, src2 } => encode:: br_if_xslt64 ( sink, src1, src2, rel ) ,
305+ Cond :: IfXslteq64 { src1, src2 } => encode:: br_if_xslteq64 ( sink, src1, src2, rel ) ,
306+ Cond :: IfXult64 { src1, src2 } => encode:: br_if_xult64 ( sink, src1, src2, rel ) ,
307+ Cond :: IfXulteq64 { src1, src2 } => encode:: br_if_xulteq64 ( sink, src1, src2, rel ) ,
308308
309309 Cond :: IfXeq32I32 { src1, src2 } => match i8:: try_from ( src2) {
310- Ok ( src2) => encode:: br_if_xeq32_i8 ( sink, src1, src2, 0 ) ,
311- Err ( _) => encode:: br_if_xeq32_i32 ( sink, src1, src2, 0 ) ,
310+ Ok ( src2) => encode:: br_if_xeq32_i8 ( sink, src1, src2, rel ) ,
311+ Err ( _) => encode:: br_if_xeq32_i32 ( sink, src1, src2, rel ) ,
312312 } ,
313313 Cond :: IfXneq32I32 { src1, src2 } => match i8:: try_from ( src2) {
314- Ok ( src2) => encode:: br_if_xneq32_i8 ( sink, src1, src2, 0 ) ,
315- Err ( _) => encode:: br_if_xneq32_i32 ( sink, src1, src2, 0 ) ,
314+ Ok ( src2) => encode:: br_if_xneq32_i8 ( sink, src1, src2, rel ) ,
315+ Err ( _) => encode:: br_if_xneq32_i32 ( sink, src1, src2, rel ) ,
316316 } ,
317317 Cond :: IfXslt32I32 { src1, src2 } => match i8:: try_from ( src2) {
318- Ok ( src2) => encode:: br_if_xslt32_i8 ( sink, src1, src2, 0 ) ,
319- Err ( _) => encode:: br_if_xslt32_i32 ( sink, src1, src2, 0 ) ,
318+ Ok ( src2) => encode:: br_if_xslt32_i8 ( sink, src1, src2, rel ) ,
319+ Err ( _) => encode:: br_if_xslt32_i32 ( sink, src1, src2, rel ) ,
320320 } ,
321321 Cond :: IfXslteq32I32 { src1, src2 } => match i8:: try_from ( src2) {
322- Ok ( src2) => encode:: br_if_xslteq32_i8 ( sink, src1, src2, 0 ) ,
323- Err ( _) => encode:: br_if_xslteq32_i32 ( sink, src1, src2, 0 ) ,
322+ Ok ( src2) => encode:: br_if_xslteq32_i8 ( sink, src1, src2, rel ) ,
323+ Err ( _) => encode:: br_if_xslteq32_i32 ( sink, src1, src2, rel ) ,
324324 } ,
325325 Cond :: IfXsgt32I32 { src1, src2 } => match i8:: try_from ( src2) {
326- Ok ( src2) => encode:: br_if_xsgt32_i8 ( sink, src1, src2, 0 ) ,
327- Err ( _) => encode:: br_if_xsgt32_i32 ( sink, src1, src2, 0 ) ,
326+ Ok ( src2) => encode:: br_if_xsgt32_i8 ( sink, src1, src2, rel ) ,
327+ Err ( _) => encode:: br_if_xsgt32_i32 ( sink, src1, src2, rel ) ,
328328 } ,
329329 Cond :: IfXsgteq32I32 { src1, src2 } => match i8:: try_from ( src2) {
330- Ok ( src2) => encode:: br_if_xsgteq32_i8 ( sink, src1, src2, 0 ) ,
331- Err ( _) => encode:: br_if_xsgteq32_i32 ( sink, src1, src2, 0 ) ,
330+ Ok ( src2) => encode:: br_if_xsgteq32_i8 ( sink, src1, src2, rel ) ,
331+ Err ( _) => encode:: br_if_xsgteq32_i32 ( sink, src1, src2, rel ) ,
332332 } ,
333333 Cond :: IfXult32I32 { src1, src2 } => match u8:: try_from ( src2) {
334- Ok ( src2) => encode:: br_if_xult32_u8 ( sink, src1, src2, 0 ) ,
335- Err ( _) => encode:: br_if_xult32_u32 ( sink, src1, src2, 0 ) ,
334+ Ok ( src2) => encode:: br_if_xult32_u8 ( sink, src1, src2, rel ) ,
335+ Err ( _) => encode:: br_if_xult32_u32 ( sink, src1, src2, rel ) ,
336336 } ,
337337 Cond :: IfXulteq32I32 { src1, src2 } => match u8:: try_from ( src2) {
338- Ok ( src2) => encode:: br_if_xulteq32_u8 ( sink, src1, src2, 0 ) ,
339- Err ( _) => encode:: br_if_xulteq32_u32 ( sink, src1, src2, 0 ) ,
338+ Ok ( src2) => encode:: br_if_xulteq32_u8 ( sink, src1, src2, rel ) ,
339+ Err ( _) => encode:: br_if_xulteq32_u32 ( sink, src1, src2, rel ) ,
340340 } ,
341341 Cond :: IfXugt32I32 { src1, src2 } => match u8:: try_from ( src2) {
342- Ok ( src2) => encode:: br_if_xugt32_u8 ( sink, src1, src2, 0 ) ,
343- Err ( _) => encode:: br_if_xugt32_u32 ( sink, src1, src2, 0 ) ,
342+ Ok ( src2) => encode:: br_if_xugt32_u8 ( sink, src1, src2, rel ) ,
343+ Err ( _) => encode:: br_if_xugt32_u32 ( sink, src1, src2, rel ) ,
344344 } ,
345345 Cond :: IfXugteq32I32 { src1, src2 } => match u8:: try_from ( src2) {
346- Ok ( src2) => encode:: br_if_xugteq32_u8 ( sink, src1, src2, 0 ) ,
347- Err ( _) => encode:: br_if_xugteq32_u32 ( sink, src1, src2, 0 ) ,
346+ Ok ( src2) => encode:: br_if_xugteq32_u8 ( sink, src1, src2, rel ) ,
347+ Err ( _) => encode:: br_if_xugteq32_u32 ( sink, src1, src2, rel ) ,
348348 } ,
349349
350350 Cond :: IfXeq64I32 { src1, src2 } => match i8:: try_from ( src2) {
351- Ok ( src2) => encode:: br_if_xeq64_i8 ( sink, src1, src2, 0 ) ,
352- Err ( _) => encode:: br_if_xeq64_i32 ( sink, src1, src2, 0 ) ,
351+ Ok ( src2) => encode:: br_if_xeq64_i8 ( sink, src1, src2, rel ) ,
352+ Err ( _) => encode:: br_if_xeq64_i32 ( sink, src1, src2, rel ) ,
353353 } ,
354354 Cond :: IfXneq64I32 { src1, src2 } => match i8:: try_from ( src2) {
355- Ok ( src2) => encode:: br_if_xneq64_i8 ( sink, src1, src2, 0 ) ,
356- Err ( _) => encode:: br_if_xneq64_i32 ( sink, src1, src2, 0 ) ,
355+ Ok ( src2) => encode:: br_if_xneq64_i8 ( sink, src1, src2, rel ) ,
356+ Err ( _) => encode:: br_if_xneq64_i32 ( sink, src1, src2, rel ) ,
357357 } ,
358358 Cond :: IfXslt64I32 { src1, src2 } => match i8:: try_from ( src2) {
359- Ok ( src2) => encode:: br_if_xslt64_i8 ( sink, src1, src2, 0 ) ,
360- Err ( _) => encode:: br_if_xslt64_i32 ( sink, src1, src2, 0 ) ,
359+ Ok ( src2) => encode:: br_if_xslt64_i8 ( sink, src1, src2, rel ) ,
360+ Err ( _) => encode:: br_if_xslt64_i32 ( sink, src1, src2, rel ) ,
361361 } ,
362362 Cond :: IfXslteq64I32 { src1, src2 } => match i8:: try_from ( src2) {
363- Ok ( src2) => encode:: br_if_xslteq64_i8 ( sink, src1, src2, 0 ) ,
364- Err ( _) => encode:: br_if_xslteq64_i32 ( sink, src1, src2, 0 ) ,
363+ Ok ( src2) => encode:: br_if_xslteq64_i8 ( sink, src1, src2, rel ) ,
364+ Err ( _) => encode:: br_if_xslteq64_i32 ( sink, src1, src2, rel ) ,
365365 } ,
366366 Cond :: IfXsgt64I32 { src1, src2 } => match i8:: try_from ( src2) {
367- Ok ( src2) => encode:: br_if_xsgt64_i8 ( sink, src1, src2, 0 ) ,
368- Err ( _) => encode:: br_if_xsgt64_i32 ( sink, src1, src2, 0 ) ,
367+ Ok ( src2) => encode:: br_if_xsgt64_i8 ( sink, src1, src2, rel ) ,
368+ Err ( _) => encode:: br_if_xsgt64_i32 ( sink, src1, src2, rel ) ,
369369 } ,
370370 Cond :: IfXsgteq64I32 { src1, src2 } => match i8:: try_from ( src2) {
371- Ok ( src2) => encode:: br_if_xsgteq64_i8 ( sink, src1, src2, 0 ) ,
372- Err ( _) => encode:: br_if_xsgteq64_i32 ( sink, src1, src2, 0 ) ,
371+ Ok ( src2) => encode:: br_if_xsgteq64_i8 ( sink, src1, src2, rel ) ,
372+ Err ( _) => encode:: br_if_xsgteq64_i32 ( sink, src1, src2, rel ) ,
373373 } ,
374374 Cond :: IfXult64I32 { src1, src2 } => match u8:: try_from ( src2) {
375- Ok ( src2) => encode:: br_if_xult64_u8 ( sink, src1, src2, 0 ) ,
376- Err ( _) => encode:: br_if_xult64_u32 ( sink, src1, src2, 0 ) ,
375+ Ok ( src2) => encode:: br_if_xult64_u8 ( sink, src1, src2, rel ) ,
376+ Err ( _) => encode:: br_if_xult64_u32 ( sink, src1, src2, rel ) ,
377377 } ,
378378 Cond :: IfXulteq64I32 { src1, src2 } => match u8:: try_from ( src2) {
379- Ok ( src2) => encode:: br_if_xulteq64_u8 ( sink, src1, src2, 0 ) ,
380- Err ( _) => encode:: br_if_xulteq64_u32 ( sink, src1, src2, 0 ) ,
379+ Ok ( src2) => encode:: br_if_xulteq64_u8 ( sink, src1, src2, rel ) ,
380+ Err ( _) => encode:: br_if_xulteq64_u32 ( sink, src1, src2, rel ) ,
381381 } ,
382382 Cond :: IfXugt64I32 { src1, src2 } => match u8:: try_from ( src2) {
383- Ok ( src2) => encode:: br_if_xugt64_u8 ( sink, src1, src2, 0 ) ,
384- Err ( _) => encode:: br_if_xugt64_u32 ( sink, src1, src2, 0 ) ,
383+ Ok ( src2) => encode:: br_if_xugt64_u8 ( sink, src1, src2, rel ) ,
384+ Err ( _) => encode:: br_if_xugt64_u32 ( sink, src1, src2, rel ) ,
385385 } ,
386386 Cond :: IfXugteq64I32 { src1, src2 } => match u8:: try_from ( src2) {
387- Ok ( src2) => encode:: br_if_xugteq64_u8 ( sink, src1, src2, 0 ) ,
388- Err ( _) => encode:: br_if_xugteq64_u32 ( sink, src1, src2, 0 ) ,
387+ Ok ( src2) => encode:: br_if_xugteq64_u8 ( sink, src1, src2, rel ) ,
388+ Err ( _) => encode:: br_if_xugteq64_u32 ( sink, src1, src2, rel ) ,
389389 } ,
390390 }
391391 }
0 commit comments