Ghidra and ida pro pseudo code are already pretty good.
As a point of comparison, I fed 10.2.2 a copy of gojq 0.12.11 that I had lying around and this is pretty representative of its output
if (DAT_0075c6c8 == (code *)0x0) {
ppuStack_38 = (undefined **)0x45ecd7;
FUN_00462ee0(&DAT_0075da28,local_10,iVar3,iVar4);
*(undefined8 *)(in_FS_OFFSET + -8) = 0x123;
if (DAT_0075da28 != 0x123) {
ppuStack_38 = (undefined **)0x45ecf8;
FUN_00460dc0();
}
}
for further comparison, I fed it actual jq and it did much better about the string literals if ((((((iVar6 == 0) || (DAT_00108018 = DAT_00108018 | 1, local_58 != 0)) &&
((iVar6 = FUN_001045a0(pFVar20,0x72,"raw-output",pcVar13), iVar6 == 0 ||
(DAT_00108018 = DAT_00108018 | 8, local_58 != 0)))) &&
((iVar6 = FUN_001045a0(pFVar20,99,"compact-output",pcVar13), iVar6 == 0 ||
(local_5c = local_5c & 0xfffff8be, local_58 != 0)))) &&
((iVar6 = FUN_001045a0(pFVar20,0x43,"color-output",pcVar13), iVar6 == 0 ||
(DAT_00108018 = DAT_00108018 | 0x40, local_58 != 0)))) &&
(((iVar6 = FUN_001045a0(pFVar20,0x4d,"monochrome-output",pcVar13), iVar6 == 0 ||
(DAT_00108018 = DAT_00108018 | 0x80, local_58 != 0)) &&
((iVar6 = FUN_001045a0(pFVar20,0x61,"ascii-output",pcVar13), iVar6 == 0 ||
(DAT_00108018 = DAT_00108018 | 0x20, local_58 != 0)))))) {
iVar6 = FUN_001045a0(pFVar20,0,"unbuffered",pcVar13);I haven't tried it yet, but I can see it being useful if it's somewhat accurate (that's a big if), and quite different from what Ghidra gives you in pseudo code.