umull之后判断结果的高32位是否为0这种汇编是怎样的逻辑?

下面是汇编代码:

MOV.W           R11, R3,LSL#1  //R3是一个unsigned int的入参
MOVS            R0, #0x44 ; 'D'
UMULL.W         R0, R1, R11, R0
MOVS            R2, #0
CMP             R1, #0
IT NE
MOVNE           R1, #1
CMP             R1, #0  
IT NE
MOVNE.W         R0, #0xFFFFFFFF
MOVS            R1, #0
BLX             j__Znajii ; operator new[](uint,int,int)

这段汇编对于R0来说是怎样的生成逻辑?
我知道先进行64位的乘法,然后判断结果的高32位是否为0,关键还判断了两次,这点令我疑惑。

单步调试